Wie kann ich die Fläche anhand der geografischen Koordinaten messen?

12

Wenn ich Polygone in geografischen Koordinaten (WGS84) habe, wie messe ich die Gesamtfläche, die jeder auf der Erdoberfläche einnimmt, unter Berücksichtigung der Erdkrümmung?

scw
quelle

Antworten:

7

PostGIS 1.5 führte einen neuen GEOGRAPHY-Typ ein . Mit diesem GEOGRAPHYTyp können nicht projizierte Koordinaten auf einem Sphäroid in einer PostGIS-Tabelle gespeichert und einige Analysefunktionen ausgeführt werden.

ST_Area Abfragen können für GEOGRAPHY-Polygone durchgeführt werden, um deren Fläche in Quadratmetern zu berechnen.

Die folgende Abfrage gibt die Fläche aller Polygone mit dem Sphäroid aus (derzeit wird nur das WGS-84Sphäroid unterstützt), sofern sie mit dem GEOGRAPHYTyp gespeichert werden :

SELECT ST_Area(the_geom) FROM table_of_polygons;

Der Algorithmus zur Berechnung der Fläche auf einem Sphäroid kann aus dem Quellcode abgeleitet werden .

fmark
quelle
Cool. Danke für die Information. Ich muss das ausprobieren.
Glennon
Was macht PostGIS unter der Haube?
mwalker
@mwalker Ich habe mir nicht die Zeit genommen, um zu lernen, aber ich habe einen Link zum Quellcode hinzugefügt, wenn Sie möchten :)
fmark
Mein ungeschultes Auge meint, dass PostGIS eine Summation verwendet, die den Bereich in Streifen schneidet und alle addiert.
Wanderer
10

Hier ist ein Link zu einem Code, der die Fläche eines einfachen Polygons (ursprünglich aus dem World Wind Forum) ergibt: http://forum.worldwindcentral.com/showthread.php?t=20724 . Dies löst das Problem auf einer Kugel, grob basierend auf der Beziehung:

Alt-Text

S = Fläche des Polygons; Theta ist die Summe der Innenwinkel im Bogenmaß; n ist die Anzahl der Eckpunkte; r ist der Radius der Kugel.

Siehe auch (Quelle des Formelbildes): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Ich würde mich freuen, Links und / oder Codes für die Polygonfläche auf einem abgeflachten Sphäroid zu sehen.

Glennon
quelle
1
@glennon Code für die Fläche eines geodätischen Polygons auf einem Sphäroid ist in GeographicLib verfügbar . Der Code enthält einen Link zu dem Artikel, aus dem der Algorithmus abgeleitet wurde.
cffk
Diese Methode, die auf der Gauss-Bonnet-Formel basiert, ist von großem mathematischen Interesse, aber für kleine Zahlen auf der Erde nahezu wertlos: Es gibt eine enorme Stornierung, um den winzigen "Überschuss" in Klammern zu finden, was häufig zu einem katastrophalen Präzisionsverlust führt. Es ist leicht, fast die gesamte Genauigkeit zu verlieren, selbst wenn mit doppelter Genauigkeit arithmetisch gearbeitet wird. Bei routinemäßigen GIS-Berechnungen funktioniert dies einfach nicht.
Whuber
7

Hier ist die Quelle für die vereinfachte Berechnung , die wir in OpenLayers durchführen. Diese Methode stammt aus "Some Algorithms for Polygons on a Sphere" (Robert G. Chamberlain und William H. Duquette, JPL-Publikation 07-03 der NASA). Der oben angegebene Code dient zur Bestimmung der Fläche eines linearen Rings (mit geografischen Koordinaten). Bereiche für Polygone und MultiPolygone werden aus den Ringen summiert.

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;
}

Ringkomponenten sind zwei Elementarrays von x-, y- (lon-, lat-) Koordinaten im obigen Code. Die OpenLayers.Util.rad-Methode konvertiert nur Grad in Bogenmaß (Grad * PI / 180).

Tim Schaub
quelle
1
Der von Ihnen verwendete Radius von 6378137,0 m entspricht dem Äquatorialradius der Erde. Gibt es dafür einen Grund? Wäre es nicht präziser, einen mittleren Radius zu verwenden?
FredB
Math.radians = Funktion (Grad) {Rückgabegrad * Math.PI / 180.0; }; x = Breite, y = Länge
Stefan Steiger
4

Sie müssen Ihre geografischen Koordinaten in eine Projektion mit einem Koordinatensystem konvertieren, mit dem Sie die Fläche mithilfe der kartesischen Mathematik berechnen können.

Ich glaube, UTM ist die akzeptierte Standardprojektion, da es sehr einfach ist, eine Zone basierend auf Ihrem Breiten- und Längengrad auszuwählen, und auch die Verzerrung selbst über Zonen hinweg minimal ist. Wenn Sie also ein Polygon in der Größe von Texas haben, können Sie UTM Zone 14 N verwenden, und es ist immer noch ziemlich genau.

Wenn sich Ihre Polygone über dem Nord- oder Südpol befinden, sollten Sie stattdessen UPS verwenden, da die UTM-Projektionen über den Polen weniger genau sind und Sie sie schnell durchqueren, wenn die Grenzen kleiner werden (da sie Längenlinien folgen).

Sobald sich Ihre Punkte in einem kartesisch freundlichen Koordinatensystem befinden, können Sie sie wie Polygone in einem Raster behandeln und die Fläche berechnen.

Wanderer
quelle
3

Eine PolygonArea-Klasse wurde 2011-07 zu GeographicLib hinzugefügt. Dies berechnet die wahre Ellipsoidfläche eines Polygons, dessen Kanten geodätisch sind. Im Gegensatz zu PostGIS erfordert die Methode keine numerische Integration. Informationen zur Dokumentation (und einen Link zu dem Artikel, aus dem die Formeln abgeleitet wurden) finden Sie unter

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

(Der Link wurde korrigiert, um die Verallgemeinerung von PolygonArea auf eine Vorlagenklasse widerzuspiegeln.)

cffk
quelle