¿Cómo obtengo el área de un polígono WGS84 en metros cuadrados?

10

Lo siguiente me da el área del polígono en grados cuadrados:

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;

Resultado: 16586.2319335938

¿Cómo obtengo el área en metros cuadrados? Intenté lo siguiente:

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;

Pero parece que ST_Transform no funciona. Me sale el siguiente mensaje de error:

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.

La falta de soporte de Proj no debería ser el problema, con SELECT PostGIS_full_version () obtengo

"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"
marca
fuente

Respuestas:

7

Tiene un par de cierre en el lugar equivocado hacia el final de su consulta. Intenté esto y obtuve un retorno de 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;

El resultado de NaN se debe a que el polígono está fuera de los límites de su proyección.

HeyOverThere
fuente
¡Eso es! ¡Gracias! Aparte de eso, las proyecciones tienen que ser 900913 y 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) 

es la sintaxis correcta Parece que has mezclado algunas comas.

bajo oscuro
fuente
2

Ambas consultas definen el SRID para el polígono como 4326, pero con base en los datos, este seguramente no es el caso. SRID 4326 (WGS84) está limitado al rango [-90,90] para latitud y [-180,180] para la longitud.

Si tiene datos de polígonos en 4326, usar ST_GeogFromText puede ser un mejor enfoque. Esto supone que sus datos están en 4326, y las mediciones en las características de la geografía estarán en metros.

Sigue una consulta de trabajo:

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

Me transformé a 900913 en lugar de 31467 porque ese SRID no cubre el área de datos de mi ejemplo.

katahdin
fuente