Bagaimana cara mendapatkan area poligon WGS84 dalam meter persegi?


10

Berikut ini memberi saya luas poligon dalam derajat persegi:

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;

Hasil: 16586.2319335938

Bagaimana cara mendapatkan area dalam meter persegi? Saya mencoba yang berikut ini:

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;

Tetapi sepertinya ST_Transform tidak berfungsi. Saya mendapatkan pesan kesalahan berikut:

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.

Dukungan Proj yang hilang seharusnya tidak menjadi masalah, dengan SELECT PostGIS_full_version () saya dapatkan

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

Jawaban:


7

Anda memiliki paren penutup di tempat yang salah menjelang akhir permintaan Anda. Saya mencoba ini dan mendapat pengembalian 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;

Hasil NaN adalah karena poligon berada di luar batas proyeksi Anda.


Itu dia! Terima kasih! Terlepas dari itu, proyeksi harus 900.913 dan 31.467: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) 

adalah sintaks yang benar. Anda tampaknya telah mencampur beberapa koma.


2

Kedua pertanyaan mendefinisikan SRID untuk poligon sebagai 4326, tetapi berdasarkan data ini jelas bukan itu masalahnya. SRID 4326 (WGS84) terbatas pada kisaran [-90,90] untuk garis lintang dan [-180,180] untuk garis bujur.

Jika Anda memiliki data poligon pada 4326, maka menggunakan ST_GeogFromText mungkin merupakan pendekatan yang lebih baik. Ini mengasumsikan bahwa data Anda dalam 4326, dan pengukuran pada fitur geografi akan dalam meter.

Kueri yang berfungsi mengikuti:

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

Saya bertransformasi ke 900913 alih-alih 31467 karena SRID itu tidak mencakup area data contoh saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.