Làm cách nào để có được diện tích của đa giác WGS84 tính bằng mét vuông?


10

Sau đây cho tôi diện tích của đa giác theo độ vuông:

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;

Kết quả: 16586.2319335938

Làm thế nào để tôi có được diện tích bằng mét vuông? Tôi đã thử như sau:

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;

Nhưng có vẻ như ST_Transform không hoạt động. Tôi nhận được thông báo lỗi sau:

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.

Thiếu hỗ trợ Proj không phải là vấn đề, với SELECT PostGIS_full_version () tôi nhận được

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

Câu trả lời:


7

Bạn có một paren đóng ở vị trí sai vào cuối truy vấn của bạn. Tôi đã thử điều này và nhận được một khoản hoàn trả 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;

Kết quả NaN là do đa giác nằm ngoài giới hạn chiếu của bạn.


Đó là nó! Cảm ơn bạn! Ngoài ra, các dự đoán phải là 900913 và 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;
Đánh dấu

2
ST_Transform(geometry,target_CRS) 

là cú pháp đúng. Bạn dường như đã trộn lẫn một số dấu phẩy.


2

Cả hai truy vấn đều xác định SRID cho đa giác là 4326, nhưng dựa trên dữ liệu thì điều này chắc chắn không phải là trường hợp. SRID 4326 (WGS84) được giới hạn trong phạm vi [-90,90] cho vĩ độ và [-180,180] cho kinh độ.

Nếu bạn có dữ liệu đa giác trong 4326, thì sử dụng ST_GeogFromText có thể là một cách tiếp cận tốt hơn. Điều này giả định rằng dữ liệu của bạn ở mức 4326 và các phép đo trên các tính năng địa lý sẽ được tính bằng mét.

Một truy vấn làm việc sau:

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

Tôi đã chuyển đổi thành 900913 thay vì 31467 vì SRID đó không bao gồm khu vực dữ liệu mẫu của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.