我正在尝试使用Flex 3站点中的lat长坐标来找到计算多边形面积的方法。 Google Maps for Flash组上的Hong007非常酷,可以发布以下功能:
private function GetPolygonArea (polygon : Polygon):Number
{
var nVer : int = polygon.getOuterVertexCount();
var sz : Number =0;
var s : Number =0;
var x : Number =0;
var y0 : Number =0;
var y1 : Number =0;
var Maplatlng:LatLng;
if (nVer>=3){
for (var i:int=0; i<nVer; i++){
Maplatlng = polygon.getOuterVertex(i);
x = Maplatlng.lng();
if (i>0){
Maplatlng = polygon.getOuterVertex(i-1);
y0 = Maplatlng.lat();
}
else{
Maplatlng = polygon.getOuterVertex(nVer-1);
y0 = Maplatlng.lat();
};
if (i<(nVer-1)){
Maplatlng = polygon.getOuterVertex(i+1);
y1 = Maplatlng.lat();
}
else{
Maplatlng = polygon.getOuterVertex(0);
y1 = Maplatlng.lat();
};
s = x * (y0-y1);
sz+=s;
};
//경위도시 1도의 m값을 곱한다(대략 면적 환산)
Maplatlng = polygon.getOuterVertex(0);
var Maplatlng1:LatLng = new
com.google.maps.LatLng(Maplatlng.lat()+1, Maplatlng.lng()+1);
var TempDISTANCE:Number =
Maplatlng.distanceFrom(Maplatlng1) / Math.sqrt(2);
return Math.abs((sz/2.0) * Math.pow(TempDISTANCE, 2));
};
return 0.0;
}
我还在http://www.freemaptools.com/area-calculator.htm使用区域计算器。
这些功能会产生稍微不同的结果。我想弄清楚哪一个更准确。似乎hong007的函数产生的结果平均比freemaptools的函数略大。但是,我不知道哪一个更准确。有什么建议吗?
答案 0 :(得分:1)
我在这个算法中添加了一些字符串。 对于谷歌地图的实验,我发现了这个数字:
are = area-(area*0.2187);
它对我来说最大(缩放= 5米)和最小(500公里)缩放级别。
答案 1 :(得分:0)
这里实现的方法非常快速而且很脏。它做了一些可能导致错误结果的假设。
首先要知道的是,Lat / Long空间相对于地面上的测量距离是非均匀缩放的。这意味着长度为1米的向量在纬度/长度空间中具有不同的长度,这取决于向量是指向大致东西向还是南北向。此外,纬度/长轴映射到地面单位的方式之间差异的大小取决于你在地球上的位置(它在极点上比在赤道上更加不同。)
上面的算法为此做了一个非常快速和肮脏的解决方法,即根据为单位直角三角形的斜边计算的距离生成比例值。这试图基本平均地球上该点的两个纬度/长轴的比例。
这有几个问题。如果多边形非常大(多个地理单元),则此平均比例值将关闭,因为它仅针对0顶点周围的局部地理单元计算。其次,平均尺度近似非常粗糙,如果你的多边形在一个维度上变化很大而在另一个维度上不是很大(沿着其中一个轴定向的一个很长的多边形多边形),它会明显地分解。这是因为比例将被计算为两个轴的比例的平均值,但由于顶点的分布,其中一个轴应该具有非常小的影响。
我没有看其他区域计算器,但我猜你是否会发现这段代码的准确性不太准确。