Как получить площадь многоугольника WGS84 в квадратных метрах?

10

Следующее дает мне площадь многоугольника в квадратных градусах:

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;

Результат: 16586.2319335938

Как мне получить площадь в квадратных метрах? Я попробовал следующее:

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;

Но похоже, что ST_Transform не работает. Я получаю следующее сообщение об ошибке:

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.

Отсутствие поддержки Proj не должно быть проблемой, с 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"
отметка
источник

Ответы:

7

У вас есть закрывающая пара в неправильном месте в конце вашего запроса. Я попробовал это и получил возврат 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;

Результат NaN связан с тем, что многоугольник находится за пределами вашей проекции.

HeyOverThere
источник
Это оно! Спасибо! Кроме того, прогнозы должны быть 900913 и 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;
Марк
2
ST_Transform(geometry,target_CRS) 

правильный синтаксис Вы, кажется, перепутали несколько запятых.

Подземье
источник
2

Оба запроса определяют SRID для полигона как 4326, но на основании данных это, безусловно, не так. SRID 4326 (WGS84) ограничен диапазоном [-90,90] для широты и [-180,180] для долготы.

Если у вас есть данные многоугольника в 4326, то лучше использовать ST_GeogFromText . Это предполагает, что ваши данные в 4326, а измерения географических объектов будут в метрах.

Рабочий запрос следует:

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

Я преобразовал в 900913 вместо 31467, потому что этот SRID не покрывает область данных моего примера.

Katahdin
источник