WGS84 poligonunun alanını metrekare cinsinden nasıl alabilirim?


10

Aşağıdakiler bana çokgen alanını kare derece olarak verir:

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;

Sonuç: 16586.2319335938

Alanı metrekare olarak nasıl edinebilirim? Aşağıdakileri denedim:

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;

Ama görünüşe göre ST_Transform çalışmıyor. Aşağıdaki hata iletisini alıyorum:

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.

Eksik Proj desteği sorun olmamalı, SELECT PostGIS_full_version () ile

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

Yanıtlar:


7

Sorgunuzun sonuna doğru yanlış yerde bir kapanış pareniniz var. Bunu denedim ve NaN geri dönüşü aldım,

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;

NaN sonucunun nedeni çokgenin projeksiyon sınırlarınızın dışında olmasıdır.


Bu kadar! Teşekkür ederim! Bunun dışında projeksiyonlar 900913 ve 31467 olmalıdır: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) 

doğru sözdizimidir. Bazı virgülleri karıştırmış görünüyorsunuz.


2

Her iki sorgu da çokgen için SRID'yi 4326 olarak tanımlar, ancak verilere dayanarak bu kesinlikle böyle değildir. SRID 4326 (WGS84) enlem için [-90,90] ve boylam için [-180,180] aralığı ile sınırlıdır.

4326'da çokgen verileriniz varsa, ST_GeogFromText kullanmak daha iyi bir yaklaşım olabilir. Bu, verilerinizin 4326'da olduğunu ve coğrafya özellikleriyle ilgili ölçümlerin metre cinsinden olacağını varsayar.

Çalışan bir sorgu aşağıdaki gibidir:

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

SRID, örnek verilerimin alanını kapsamadığından 31467 yerine 900913'e dönüştüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.