Come posso ottenere l'area di un poligono WGS84 in metri quadrati?


10

Quanto segue mi dà l'area del poligono in gradi quadrati:

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;

Risultato: 16586.2319335938

Come posso ottenere l'area in metri quadrati? Ho provato quanto segue:

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;

Ma sembra che ST_Transform non funzioni. Ricevo il seguente messaggio di errore:

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.

Il supporto di Proj mancante non dovrebbe essere il problema, con SELECT PostGIS_full_version ()

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

Risposte:


7

Hai una parentesi chiusa nella posizione sbagliata verso la fine della query. Ho provato questo e ho ottenuto un ritorno 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;

Il risultato NaN è dovuto al fatto che il poligono è fuori dai limiti della proiezione.


Questo è tutto! Grazie! A parte questo, le proiezioni devono essere 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;
Marco

2
ST_Transform(geometry,target_CRS) 

è la sintassi corretta. Sembra che tu abbia confuso alcune virgole.


2

Entrambe le query definiscono SRID per il poligono come 4326, ma in base ai dati questo non è sicuramente il caso. SRID 4326 (WGS84) è limitato all'intervallo [-90,90] per la latitudine e [-180.180] per la longitudine.

Se disponi di dati poligonali nel 4326, utilizzare ST_GeogFromText potrebbe essere un approccio migliore. Ciò presuppone che i dati siano in 4326 e che le misurazioni sulle caratteristiche geografiche saranno in metri.

Segue una query funzionante:

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

Mi sono trasformato in 900913 anziché 31467 perché SRID non copre l'area dei miei dati di esempio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.