Comment obtenir l'aire d'un polygone WGS84 en mètres carrés?

10

Ce qui suit me donne l'aire du polygone en degrés carrés:

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;

Résultat: 16586.2319335938

Comment obtenir la surface en mètres carrés? J'ai essayé ce qui suit:

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;

Mais il semble que ST_Transform ne fonctionne pas. Je reçois le message d'erreur suivant:

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.

Le support manquant de Proj ne devrait pas être le problème, avec SELECT PostGIS_full_version () j'obtiens

"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"
marque
la source

Réponses:

7

Vous avez un paren de fermeture au mauvais endroit vers la fin de votre requête. J'ai essayé et j'ai obtenu un retour NaN,

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;

Le résultat NaN est dû au fait que le polygone est en dehors des limites de votre projection.

HeyOverThere
la source
C'est ça! Je vous remercie! En dehors de cela, les projections doivent être 900913 et 31467: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) 

est la syntaxe correcte. Vous semblez avoir mélangé des virgules.

obscur
la source
2

Les deux requêtes définissent le SRID pour le polygone comme 4326, mais sur la base des données, ce n'est sûrement pas le cas. Le SRID 4326 (WGS84) est limité à la plage [-90,90] pour la latitude et [-180,180] pour la longitude.

Si vous avez des données de polygone dans 4326, l'utilisation de ST_GeogFromText peut être une meilleure approche. Cela suppose que vos données sont en 4326 et que les mesures sur les entités géographiques seront en mètres.

Une requête de travail suit:

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)
)

Je me suis transformé en 900913 au lieu de 31467 car ce SRID ne couvre pas la zone de mes données d'exemple.

katahdin
la source