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

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.

HeyOverThere
sumber
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.

underdark
sumber
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.

katahdin
sumber