首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

[转帖]ArcGIS Flex 获取Polygon的中心点座标

2012-07-04 
[转帖]ArcGIS Flex 获取Polygon的中心点坐标网上无意中看到,本来用extent.center可以获取,但是这样的中心

[转帖]ArcGIS Flex 获取Polygon的中心点坐标
网上无意中看到,本来用extent.center可以获取,但是这样的中心点经常是重心点,现在觉得这个算法比较好,但自己也没试验,先放这,有用的人拿走.

/*** Author:Wu Yongfeng* MSN/Email:warrenwyf@gmail.com*/package wuyf{    import com.esri.ags.geometry.Extent;    import com.esri.ags.geometry.MapPoint;    import com.esri.ags.geometry.Polygon;        public class GeometryUtil    {        /**         * 获取多边形的重心         * @param polygon 多边形         * @return 重心点         *          */        static public function getGravityCenter(polygon polygon):MapPoint        {            var ext:Extent = polygon.extent;                        var p0:MapPoint = new MapPoint(ext.xmin, ext.ymin);                        var momentX:Number = 0;            var momentY:Number = 0;            var weight:Number = 0;            for (var i:int=0; i<polygon.rings.length; i++ )            {                var pts:Array = polygon.rings as Array;                for ( var j:int=0; j<pts.length; j++ )                {                    var p1:MapPoint = polygon.getPoint(i, j);                    var p2:MapPoint;                    if( j==pts.length-1 )                    {                        p2 = polygon.getPoint(i, 0);                    }                    else                    {                        p2 = polygon.getPoint(i, j+1);                    }                                        var dWeight:Number = (p1.x-p0.x)*(p2.y-p1.y)                     - (p1.x-p0.x)*(p0.y-p1.y)/2                     - (p2.x-p0.x)*(p2.y-p0.y)/2                    - (p1.x-p2.x)*(p2.y-p1.y)/2;                    weight += dWeight;                                        var pTmp:MapPoint = new MapPoint((p1.x+p2.x)/2, (p1.y+p2.y)/2);                    var gravityX:Number = p0.x + (pTmp.x-p0.x)*2/3;                    var gravityY:Number = p0.y + (pTmp.y-p0.y)*2/3;                    momentX += gravityX*dWeight;                    momentY += gravityY*dWeight;                                    }            }                            return new MapPoint(momentX/weight, momentY/weight);        }    }}

热点排行