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