原帖由
liuxingfeiye 于 2013-9-28 20:25:32 發(fā)表
網(wǎng)優(yōu)工作這兩年多來(通信三年),感覺有個工具軟件太方便了,最近又卸載了那坑爹的LOL后沒事干,剛好最近想玩下mapinfo插件,想起好像有個很火的seeSite,記得用過一次,唯一有印象的就是扇區(qū)能自動合理大小, ...
第二次看帖了,咱們可以研究下 mapxtreme的;
既然你使用mapxtreme,也想比較繪制扇區(qū)的算法,我這里再給你提供一個mapxtreme的繪制扇區(qū)的函數(shù)雖然是C# 的,很容易就能改為 java 了。你試試,比較下速度怎么樣?
代碼直接上了。 現(xiàn)成的 C#函數(shù)不需要改任何地方
帖代碼前再PS一個: 有空研究下“泰森多邊形” 這個玩意,非常好玩;
以下為代碼,別閑少。
/// <summary>
/// 創(chuàng)建扇形
/// </summary>
/// <param name="coordSys">坐標(biāo)系</param>
/// <param name="pt">中心點</param>
/// <param name="radius">半徑</param>
/// <param name="startAngle">起始角</param>
/// <param name="endAngle">終止角</param>
/// <returns></returns>
public static FeatureGeometry CreateSector(CoordSys coordSys, DPoint pt, double radius, int startAngle, int endAngle)
{
FeatureGeometry ftr;
if (startAngle == 0 && endAngle == 360)
//經(jīng)緯度坐標(biāo)系,所以Spherical
ftr = new MapInfo.Geometry.Ellipse(coordSys, pt, radius * 0.75, radius * 0.75, DistanceUnit.Meter,DistanceType.Spherical);
else
{
int a2 = AngleConvertN2E(startAngle);
int a1 = AngleConvertN2E(endAngle);
//因為LegacyArc是逆時針坐標(biāo)軸,所以轉(zhuǎn)換后起始位置交換
var arc = new MapInfo.Geometry.LegacyArc(coordSys, pt, radius, radius, DistanceUnit.Meter,
DistanceType.Spherical, a1, a2);
var mc = arc.CreateMultiCurve(100);
var arcPts = mc[0][0].SamplePoints();
var linePts = new[] { mc[0].EndPoint, pt, mc[0].StartPoint };
var pts = new MapInfo.Geometry.DPoint[arcPts.Length - 1 + 3];
for (int i = 0, j = 0; i < arcPts.Length - 1 + 3; i++)
{
if (i < arcPts.Length - 1)
pts
= arcPts;
else
pts = linePts[j++];
}
ftr = new MultiPolygon(coordSys, CurveSegmentType.Linear, pts);
}
return ftr;
}
[
本帖最后由 life_is_sweet 于 2013-12-10 23:27 編輯 ]