Apache flex 当多边形';s点是横向长度:哪个函数更精确?

Apache flex 当多边形';s点是横向长度:哪个函数更精确?,apache-flex,polygon,latitude-longitude,Apache Flex,Polygon,Latitude Longitude,我试图找到一种在Flex3站点中使用lat-long坐标计算多边形面积的方法。Google Maps for Flash group上的Hong007非常酷,发布了以下功能: private function GetPolygonArea (polygon : Polygon):Number { var nVer : int = polygon.getOuterVertexCount(); var sz : Number =0

我试图找到一种在Flex3站点中使用lat-long坐标计算多边形面积的方法。Google Maps for Flash group上的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; 
        }
私有函数GetPolygorea(多边形:多边形):编号
{ 
var nVer:int=polygon.getOuterTextCount();
var sz:数值=0;
变量s:数值=0;
变量x:Number=0;
变量y0:Number=0;
变量y1:Number=0;
var Maplatlng:LatLng;
如果(nVer>=3){
对于(var i:int=0;i0){
Maplatlng=多边形。getOuterVertex(i-1);
y0=Maplatlng.lat();
} 
否则{
Maplatlng=多边形。getOuterVertex(nVer-1);
y0=Maplatlng.lat();
}; 

如果(i这里实现的方法非常快速和肮脏。它做出了一些可能导致错误结果的假设

首先要知道的是,相对于地面上的测量距离,Lat/Long空间的比例是不均匀的。这意味着长度为1米的向量在Lat/Long空间中的长度不同,这取决于向量大致指向的是东西向还是南北向。此外,Lat/Long ax之间的差异大小es地图到地面单位的变化取决于你在地球上的位置(两极的差异比赤道大得多)

上面的算法对此做了一个非常快速和肮脏的解决方法,即根据为单位直角三角形斜边计算的距离生成一个比例值。这试图基本上平均地球上该点的两个纬度/长轴的比例

这有几个问题。如果多边形非常大(多个地理单元),则此平均比例值将被禁用,因为它仅为0顶点周围的局部地理单元计算。其次,平均比例近似值实际上非常粗糙,如果存在在一个维度上变化很大但在另一个维度上变化不大的多边形(沿其中一个轴定向的长而薄的多边形),则该值将显著分解。这是因为比例将计算为两个轴比例的平均值,但由于顶点的分布,其中一个轴的影响应非常小


我没有看另一个面积计算器,但如果您看到差异,我会猜这段代码是不太准确的版本。

我在这个算法中添加了一些字符串。 对于谷歌地图,我发现以下数字:

are = area-(area*0.2187);

它适用于我的最大距离(5米)和最小距离(500公里)缩放级别。

Hi Bshiels,谢谢你的详细回复。现在,我对该功能的工作原理和缺点有了更好的了解。我的多边形位于美国东海岸一个城市的街区。平均而言,多边形的面积为1-3平方公里。因此,希望你概述的问题不会造成太大的误差。Unfo当然,面积计算器没有提供所使用的功能,因此,我必须分别输入每个多边形,这将是一件痛苦的事情。你认为hong007的功能在城市层面上是合理准确的吗?谢谢!@Laxmidi我提到的第一件事与多边形大小有关。更重要的问题是方法平均两个轴之间的比例。这将为正方形提供正确的结果,但不规则形状的多边形将具有不正确的面积,最糟糕的情况是那些非常长方形且沿其中一个轴定向的多边形。如果你想做到这一点,我想你必须将这些点投影到投影坐标系,如UTM并计算该空间中的面积。