Wie erhalte ich die Fläche eines WGS84-Polygons in Quadratmetern?


10

Das Folgende gibt mir die Fläche des Polygons in quadratischen Graden:

SELECT ST_Area(ST_GeomFromText('POLYGON((871325.790874952 6105405.3261047,871418.748307692 6105359.72944624,871346.22022442 6105215.141258,871254.85408906 6105261.72007212,871325.790874952 6105405.3261047))',4326)) As sqm;

Ergebnis: 16586.2319335938

Wie bekomme ich die Fläche in Quadratmetern? Ich habe folgendes versucht:

SELECT ST_Area(ST_Transform(ST_GeomFromText('POLYGON((871325.790874952 6105405.3261047,871418.748307692 6105359.72944624,871346.22022442 6105215.141258,871254.85408906 6105261.72007212,871325.790874952 6105405.3261047))',4326)),31467) As sqm;

Aber es scheint, dass ST_Transform nicht funktioniert. Ich erhalte die folgende Fehlermeldung:

ERROR:  function st_transform(geometry) does not exist
LINE 1: SELECT ST_Area(ST_Transform(ST_GeomFromText('POLYGON((871325...
                       ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
 ERROR: function st_transform(geometry) does not exist
SQL Status:42883
Hint:No function matches the given name and argument types. You might need to add explicit type casts.

Fehlende Proj-Unterstützung sollte nicht das Problem sein, mit SELECT PostGIS_full_version () bekomme ich

"POSTGIS="1.5.3" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.8.0, 6 March 2012" LIBXML="2.8.0" USE_STATS"

Antworten:


7

Sie haben gegen Ende Ihrer Abfrage einen schließenden Paren am falschen Ort. Ich habe es versucht und eine NaN-Rückgabe erhalten.

SELECT ST_AREA(ST_Transform(ST_GeomFromText('POLYGON((871325.790874952 6105405.3261047,871418.748307692 6105359.72944624,871346.22022442 6105215.141258,871254.85408906 6105261.72007212,871325.790874952 6105405.3261047))',4326),31467)) As sqm;

Das NaN-Ergebnis ist darauf zurückzuführen, dass das Polygon außerhalb der Grenzen Ihrer Projektion liegt.


Das ist es! Vielen Dank! Abgesehen davon müssen die Projektionen 900913 und 31467 sein:SELECT ST_AREA(ST_Transform(ST_GeomFromText('POLYGON((871325.790874952 6105405.3261047,871418.748307692 6105359.72944624,871346.22022442 6105215.141258,871254.85408906 6105261.72007212,871325.790874952 6105405.3261047))',900913),31467)) As sqm;
Mark

2
ST_Transform(geometry,target_CRS) 

ist die richtige Syntax. Sie scheinen einige Kommas verwechselt zu haben.


2

Beide Abfragen definieren die SRID für das Polygon als 4326, aber basierend auf den Daten ist dies sicherlich nicht der Fall. SRID 4326 (WGS84) ist auf den Bereich [-90,90] für den Breitengrad und [-180,180] für den Längengrad beschränkt.

Wenn Sie in 4326 Polygondaten haben, ist die Verwendung von ST_GeogFromText möglicherweise ein besserer Ansatz. Dies setzt voraus, dass sich Ihre Daten in 4326 befinden und die Messungen der geografischen Merkmale in Metern erfolgen.

Eine Arbeitsabfrage folgt:

SELECT
ST_Area(
ST_Transform(
ST_SetSRID(
ST_GeomFromText(
'POLYGON((-98.4854749658124 29.3495134003054,-97.4374094977531 29.4150174920591,-97.2408972224919 28.4979602075071,-98.354466782305 28.4324561157534,-98.4854749658124 29.3495134003054))'
)
, 4326)
, 900913)
)

Ich habe auf 900913 anstatt auf 31467 umgestellt, da diese SRID den Bereich meiner Beispieldaten nicht abdeckt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.