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

网上无意中看到,本来用extent.center可以获取,但是这样的中心点经常是重心点,现在觉得这个算法比较好,但自己也没试验,先放这,有用的人拿走.
/**
* Author:Wu Yongfeng
* MSN/Email:[email protected]
*/
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);
        }

    }
}

猜你喜欢

转载自tzraeq.iteye.com/blog/972786