Como obtenho a área de um polígono WGS84 em metros quadrados?

10

A seguir, é apresentada a área do polígono em graus quadrados:

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

Como faço para obter a área em metros quadrados? Eu tentei o seguinte:

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;

Mas parece que ST_Transform não funciona. Eu recebi a seguinte mensagem de erro:

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.

Faltar suporte ao Proj não deve ser o problema, com SELECT PostGIS_full_version () eu recebo

"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
fonte

Respostas:

7

Você tem um ponto final no lugar errado no final da sua consulta. Eu tentei isso e recebi um 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;

O resultado do NaN é devido ao polígono estar fora dos limites da sua projeção.

HeyOverThere
fonte
É isso aí! Obrigado! Além disso, as projeções devem ser 900913 e 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;
Marque
2
ST_Transform(geometry,target_CRS) 

é a sintaxe correta. Você parece ter misturado algumas vírgulas.

underdark
fonte
2

Ambas as consultas definem o SRID para o polígono como 4326, mas com base nos dados, esse certamente não é o caso. O SRID 4326 (WGS84) está limitado ao intervalo [-90,90] para latitude e [-180,180] para longitude.

Se você tiver dados de polígono em 4326, usar o ST_GeogFromText pode ser uma abordagem melhor. Isso pressupõe que seus dados estejam em 4326 e as medições nos recursos geográficos serão em metros.

Uma consulta de trabalho a seguir:

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

Eu mudei para 900913 em vez de 31467 porque esse SRID não cobre a área dos meus dados de exemplo.

katahdin
fonte