Jak mogę zmierzyć obszar ze współrzędnych geograficznych?

12

Jeśli mam wielokąty we współrzędnych geograficznych (WGS84), jak zmierzyć całkowity obszar na powierzchni Ziemi, biorąc pod uwagę krzywiznę Ziemi?

scw
źródło

Odpowiedzi:

7

PostGIS 1.5 wprowadził nowy typ GEOGRAFII . Ten GEOGRAPHYtyp umożliwia przechowywanie nie rzutowanych współrzędnych na sferoidie w tabeli PostGIS i wykonywanie na nich niektórych funkcji analitycznych.

ST_Area zapytania można wykonywać na wielokątach typu GEOGRAFIA w celu obliczenia ich powierzchni w metrach kwadratowych.

Poniższe zapytanie wyprowadza obszar wszystkich wielokątów wykorzystujących sferoidę (obecnie WGS-84obsługiwana jest tylko sferoida), zakładając, że są one przechowywane przy użyciu GEOGRAPHYtypu:

SELECT ST_Area(the_geom) FROM table_of_polygons;

Algorytm zastosowany do obliczenia pola powierzchni sferoidy można uzyskać z kodu źródłowego .

fmark
źródło
Chłodny. Dzięki za informację. Będę musiał to wypróbować.
glennon
Co robi PostGIS pod maską?
mwalker
@mwalker Nie poświęciłem czasu na naukę, ale dodałem link do kodu źródłowego, jeśli chcesz :)
fmark
moim niewprawnym okiem, PostGIS używa sumowania, rzeźbi obszar w paski i sumuje je wszystkie.
mwalker
10

Oto link do kodu, który da obszar prostego wielokąta (pierwotnie z World Wind Forum): http://forum.worldwindcentral.com/showthread.php?t=20724 . To rozwiązuje problem na sferze, z grubsza opartej na relacji:

alternatywny tekst

S = powierzchnia wielokąta; theta jest sumą kątów wewnętrznych w radianach; n jest liczbą wierzchołków; r jest promieniem kuli.

Zobacz też (źródło obrazu wzoru): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Byłbym zachwycony, widząc linki i / lub kodowanie obszaru wielokąta na spłaszczonej sferoidie.

glennon
źródło
1
@glennon Kod obszaru wielokąta geodezyjnego na sferoidie jest dostępny w GeographicLib . Kod zawiera link do papieru, z którego pochodzi algorytm.
cffk
Ta metoda, oparta na formule Gaussa-Bonneta, ma duże znaczenie matematyczne, ale jest prawie bezwartościowa dla małych postaci na ziemi: istnieje ogromne anulowanie w celu znalezienia drobnego „nadmiaru” w nawiasach, co często prowadzi do katastrofalnej utraty precyzji - łatwo całkowicie stracić prawie całą precyzję, nawet podczas pracy z arytmetyką podwójnej precyzji. W przypadku rutynowych obliczeń GIS po prostu nie działa.
whuber
7

Oto źródło uproszczonych obliczeń , które wykonujemy w OpenLayers. Ta metoda pochodzi z „Some Algorytm for Polygons on a Sphere” (Robert. G. Chamberlain i William H. Duquette, publikacja NASA JPL 07-03). Kod powiązany z powyższym służy do określania obszaru pierścienia liniowego (ze współrzędnymi geograficznymi). Obszary dla wielokątów i wielokątów są sumowane z pierścieni.

var area = 0.0;
var len = ring.components && ring.components.length;
if (len > 2) {
    var p1, p2;
    for (var i=0; i<len-1; i++) {
        p1 = ring.components[i];
        p2 = ring.components[i+1];
        area += OpenLayers.Util.rad(p2.x - p1.x) *
            (2 + Math.sin(OpenLayers.Util.rad(p1.y)) +
            Math.sin(OpenLayers.Util.rad(p2.y)));
    }
    area = area * 6378137.0 * 6378137.0 / 2.0;
}

Składniki pierścieniowe to tablice dwuelementowe współrzędnych x, y (lon, lat) w powyższym kodzie. Metoda OpenLayers.Util.rad konwertuje stopnie na radiany (deg * PI / 180).

Tim Schaub
źródło
1
Promień, którego używasz, 6378137,0 m, odpowiada promieniowi równikowemu Ziemi. Czy jest ku temu powód? Czy użycie średniego promienia nie byłoby bardziej precyzyjne?
FredB
Math.radians = funkcja (stopnie) {stopnie zwrotu * Math.PI / 180.0; }; x = szerokość geograficzna, y = długość geograficzna
Stefan Steiger
4

Musisz przekonwertować swoje współrzędne geograficzne na rzut, który ma układ współrzędnych, który pozwala użyć matematyki kartezjańskiej do obliczenia powierzchni.

Uważam, że UTM jest przyjętą standardową projekcją, ponieważ bardzo łatwo jest wybrać strefę na podstawie szerokości i długości geograficznej, a także zniekształcenie jest minimalne, nawet w strefach. Tak więc, jeśli masz wielokąt wielkości Teksasu, możesz użyć strefy UTM 14 N i nadal będzie dość dokładny.

Jeśli twoje wielokąty znajdują się ponad biegunem północnym lub południowym, powinieneś zamiast tego użyć zasilacza UPS , ponieważ rzuty UTM są mniej dokładne na biegunach i szybko je przemierzasz, gdy granice stają się mniejsze (ponieważ podążają wzdłuż linii długości)

Gdy punkty znajdą się w układzie współrzędnych przyjaznym kartezjańczykom, możesz traktować je jak wielokąty na siatce i obliczać obszar.

mwalker
źródło
3

Klasa GeygonArea została dodana do GeographicLib w 2011-07. Oblicza to prawdziwy elipsoidalny obszar wielokąta, którego krawędzie są geodezyjne. W przeciwieństwie do PostGIS metoda nie wymaga integracji numerycznej. Dokumentacja (i link do artykułu, z którego pochodzą formuły), patrz

http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html

(Link naprawiono, aby odzwierciedlić uogólnienie PolygonArea do klasy szablonu).

cffk
źródło