Jak uzyskać powierzchnię wielokąta WGS84 w metrach kwadratowych?

10

Poniżej podano obszar wielokąta w stopniach kwadratowych:

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;

Wynik: 16586.2319335938

Jak uzyskać powierzchnię w metrach kwadratowych? Próbowałem następujące:

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;

Ale wygląda na to, że ST_Transform nie działa. Otrzymuję następujący komunikat o błędzie:

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.

Brak obsługi Proj nie powinien stanowić problemu, ponieważ otrzymuję 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"
znak
źródło

Odpowiedzi:

7

Masz zamykający paren w niewłaściwym miejscu pod koniec zapytania. Próbowałem tego i otrzymałem zwrot 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;

Wynik NaN wynika z faktu, że wielokąt znajduje się poza granicami projekcji.

HeyOverThere
źródło
Otóż ​​to! Dziękuję Ci! Poza tym prognozy muszą wynosić 900913 i 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;
Mark
2
ST_Transform(geometry,target_CRS) 

jest poprawną składnią. Wygląda na to, że masz pomieszane przecinki.

podmrok
źródło
2

Oba zapytania definiują SRID dla wielokąta jako 4326, ale na podstawie danych z pewnością tak nie jest. SRID 4326 (WGS84) jest ograniczony do zakresu [-90, 90] dla szerokości geograficznej i [-180, 180] dla długości geograficznej.

Jeśli masz dane wielokąta w 4326, lepszym rozwiązaniem może być użycie ST_GeogFromText . Zakłada się, że twoje dane są w 4326, a pomiary cech geograficznych będą w metrach.

Oto działające zapytanie:

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

Przekształciłem się w 900913 zamiast 31467, ponieważ ten identyfikator SRID nie obejmuje obszaru moich przykładowych danych.

katahdin
źródło