`
tzraeq
  • 浏览: 80900 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

[转帖]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);
        }

    }
}

分享到:
评论
1 楼 Allen_Oscar 2013-08-12  
不对,算法有问题

相关推荐

Global site tag (gtag.js) - Google Analytics