Ich führe eine einfache Berechnung für ein Polygon durch, von dem bekannt ist, dass es eine Fläche von ungefähr 6226 km ^ 2 hat. Es wird in einer Spalte Geografie (WGS84 SRID) gespeichert.
Die Abfrage lautet:
select st_astext(col), st_area(col) area from table
und kehrt zurück:
"POLYGON((-180 58.282525588539,-178.916399160189 57.4759784390599,-178.191728834624 58.5761461944577,-180 58.282525588539))" | 5807028547.33813
Die zurückgegebene Fläche (5807028547.33813) scheint mm ^ 2 und nicht km ^ 2 zu sein. In der Dokumentation http://postgis.net/docs/ST_Area.html heißt es: "Standardmäßig wird die Fläche auf einem Sphäroid mit Einheiten in Quadratmetern bestimmt."
Handelt es sich um einen Dokumentationsfehler oder ist der obige Fehler korrekt und ich verstehe die Funktionalität grundlegend falsch?
ST_Area (Geometrie) berechnet die Polygonfläche als WGS1984, OHNE auf eine Kugel / Ellipse mit gleicher Fläche zu projizieren (wenn Sie die Geometrie vom SQL-Typ anstelle von Geographie verwenden). Das Ergebnis wird in der Einheit in der SRID der Geometrie gemessen.
ST_Area (Geografie) berechnet die Polygonfläche als WGS1984, mit Kugel / Ellipsen auf gleiche Fläche vorsteht (wenn Sie den SQL-Typen Geografie statt Geometrie verwenden). Das Ergebnis wird in Quadratmetern gemessen. Um von m 2 auf km 2 zu gelangen , müssen Sie m 2 durch 1000 2 teilen (1000 Meter in einem Kilometer - es ist ein Quadrat, weil es eine Fläche ist, also 1000 * 1000 oder 1000 2 ).
ST_Area (Geometrie, wahr / falsch) berechnet die Fläche (in m 2 ) mit Koordinaten, die in das Koordinatensystem CylindricalEqualAreaworld projiziert werden (Fläche beibehalten - sinnvoll, wenn Sie die Fläche berechnen möchten).
Der Unterschied zwischen wahr / falsch ist die Genauigkeit.
ST_Area (geog, false) verwendet eine schnellere, aber weniger genaue Kugel.
Sagen Sie, wenn ich dieses Polygon verwende:
Ich erhalte folgende Ergebnisse:
Ich denke, der wichtige Teil, der aus den Dokumenten entnommen werden muss, ist folgender:
Sie müssen also vorsichtig sein, um die Geografie und NICHT die Geometrie auszuwählen .
Wenn Sie Geometrie verwenden, MÜSSEN Sie die True / False-Überladungen von ST_Area verwenden.
In C # erhalte ich mit KnownCoordinateSystems.Projected.World.CylindricalEqualAreaworld mehr oder weniger das Gleiche wie true, und false scheint eine Welt mit einem mittleren Erdradius zu sein, etwas, das WorldSpheroid.CylindricalEqualAreasphere oder WorldSpheroid.EckertIVsphere nahe kommt, aber es ist um 2m 2 ab , also scheint es sein eigenes Ding zu machen.
zB erhalten Sie eine enge Anpassung an false mit dem mittleren Radius:
WebMercator ist das von Google-Maps verwendete Koordinatensystem.
Der offizielle Name für dieses Koordinatensystem lautet EPSG: 3857.
Was genau PostGIS tut, ist hier dokumentiert:
https://postgis.net/docs/ST_Area.html
Details zum Quellcode finden Sie hier:
http://postgis.net/docs/doxygen/2.2/dc/d52/geography__measurement_8c_a1a7c48d59bcf4ed56522ab26c142f61d.html
und hier:
http://postgis.net/docs/doxygen/2.2/d1/dc0/lwspheroid_8c_a29d141c632f6b46587dec3a1dbe3d176.html#a29d141c632f6b46587dec3a1dbe3d176
Albers-Projektion:
Zylindrische flächengleiche Projektion:
quelle