MapXtreme创建扇形

来源:互联网 发布:如何利用qq群做淘宝客 编辑:程序博客网 时间:2024/05/17 09:09

/// <summary>        /// 顺时针正北0度->逆时针正东0度        /// </summary>        /// <param name="azimuth"></param>        /// <returns></returns>        public static int AngleConvertN2E(int azimuth)        {            return ((360 - azimuth) + 90) % 360;        }

/// <summary>        /// 创建扇形        /// </summary>        /// <param name="coordSys">坐标系</param>        /// <param name="pt">中心点</param>        /// <param name="radius">半径</param>        /// <param name="startAngle">起始角</param>        /// <param name="endAngle">终止角</param>        /// <returns></returns>        internal static FeatureGeometry CreateSector(CoordSys coordSys, DPoint pt, double radius, int startAngle, int endAngle)        {            FeatureGeometry ftr;            if (startAngle == 0 && endAngle == 360)                ftr = new MapInfo.Geometry.Ellipse(coordSys, pt, radius * 0.75, radius * 0.75, DistanceUnit.Meter,                                                   DistanceType.Spherical);//因为是经纬度坐标系,所以只能用Spherical            else            {                int a2 = AngleConvertN2E(startAngle);                int a1 = AngleConvertN2E(endAngle);//因为LegacyArc是用的逆时针坐标轴,所以转换后起始位置要交换一下                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[i] = arcPts[i];                    else                        pts[i] = linePts[j++];                }                ftr = new MultiPolygon(coordSys, CurveSegmentType.Linear, pts);            }            return ftr;        }


效果预览: