网上无意中看到,本来用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);
}
}
}
分享到:
相关推荐
arcgis 生成多边形的四至点坐标插件 10.0测试通过 txb工具箱格式 别的版本理论可行
基于arcgis flex api 实现动态标绘功能,为2.0新版本
ArcGIS API For JavaScript 4.x 获取地图经纬度坐标(附完整代码,即开即用)
Arcgis flex api自定义风场点图标样式
分别用ArcGIS Flex API和SuperMap Flex API实现的军标箭头库,有需要源码的可回复邮箱索取。
利用ArcGIS Flex 实现专题地图制作的代码和文字说明,包括等级地图、柱状图和文字标注的实现。
老师给我滴!!ARCGIS中坐标转换及地理坐标、投影坐标定义
是学习 ArcGIS Flex 最佳资料源码,供初级人学习使用
arcgis flex api 3.0 离线帮助文档chm格式 绝对好用!
arcgis flex api 2.5 最新
自己收集的 Arcgis Flex学习资料,对初学者有一定帮助
使用ARCGIS进行坐标系转换:北京54坐标系西安80坐标转换
ARCGIS for FLEX 增强的FLEX功能,容易使用,在ARCGIS上专用
arcgis中经纬度和平面坐标之间的相互转换方法
arcgis9.2 地图坐标转换屏幕坐标,和在打sp4补丁包遇到了一些问题
ArcGIS中经纬度转CGCS2000坐标系方法步骤
介绍如何将大量坐标的点导入到ARCGIS中,使用此法方便、快捷、省事、不易出错。
Arcgis Flex Resource Center 离线版 API 等可以离线学习
flex for arcgis arcgis_api_for_flex_1.2.zip
ArcGIS的Flex版鹰眼效果,可以直接运行