Вычисление площади многоугольника, когда точки многоугольника имеют широтные значения: какая функция более точна? - PullRequest
0 голосов
/ 28 июля 2010

Я пытаюсь найти способ вычислить площадь многоугольника, используя длинные координаты на сайте Flex 3.Hong007 в группе Google Карты для Flash был достаточно крут, чтобы опубликовать следующую функцию:

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.Однако я не знаю, какой из них более точный.Любой совет?

Ответы [ 2 ]

1 голос
/ 16 апреля 2012

Я добавил некоторую строку в этот алгоритм. Для карт Google экспериментально я нашел эти цифры:

are = area-(area*0.2187);

и он работает для меня для максимального (масштаб = 5 метров) и минимального (500 км) уровней масштабирования.

0 голосов
/ 28 июля 2010

Метод, реализованный здесь, довольно быстрый и грязный. Это делает пару предположений, которые могут привести к неверным результатам.

Первое, что нужно знать, это то, что пространство широты / долготы неравномерно масштабируется относительно измеренного расстояния на земле. Это означает, что вектор длиной один метр имеет разную длину в широтном / длинном пространстве в зависимости от того, указывает ли вектор примерно восток-запад или север-юг. Кроме того, величина разницы между тем, как оси широты и долготы отображаются на наземные единицы, изменяется в зависимости от того, где вы находитесь на земном шаре (на полюсах она намного больше, чем на экваторе.)

Алгоритм выше делает очень быстрый и грязный обходной путь для этого, который должен генерировать масштабное значение, основанное на расстоянии, вычисленном для гипотенузы единичного прямоугольного треугольника. Это пытается в основном усреднить масштабы двух широт / длинных осей для этой точки на земном шаре.

Есть несколько проблем с этим. Если многоугольник очень большой (несколько геоэлементов), то это среднее значение масштаба будет отключено, поскольку оно рассчитывается только для локального геоячейки вокруг вершины 0. Во-вторых, аппроксимация среднего масштаба действительно очень грубая и будет сильно ломаться, если у вас есть многоугольники, которые сильно различаются в одном измерении, но не в другом (длинный тощий многоугольник, ориентированный вдоль одной из осей). Это связано с тем, что масштаб будет рассчитываться как среднее от масштаба двух осей, но одна из осей должна иметь очень небольшое влияние из-за распределения вершин.

Я не смотрел калькулятор другой области, но, думаю, если вы видите расхождения, этот код является менее точной версией.

...