Lấy chiều dài hình học tính bằng mét?


13

Trong PostGIS, ST_length()hàm trả về độ dài của một dòng trong một số đơn vị, nhưng không tính bằng mét.

Có một chức năng như ST_Length()nhưng tính bằng mét?

Câu trả lời:


11

St_Lpm () trả về độ dài tính theo đơn vị của Hệ thống tham chiếu không gian của nó. Nếu bạn muốn lấy mét, bạn sẽ cần chuyển đổi tính năng của mình sang SRS khác sử dụng mét làm đơn vị. Điều này có thể được thực hiện nhanh chóng, vì vậy đừng lo lắng về việc viết ra một bộ dữ liệu khác.

SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;

Trong ví dụ này, SRID 26915 là UTM Vùng 15 N, NAD83.


Hoặc đơn giản là thêm lĩnh vực của riêng bạn và tự mình quản lý tính toán. LƯU Ý bạn phải viết trình kích hoạt của riêng bạn hoặc tính toán lại khi thay đổi độ dài của bạn.
Brad Nesom

18

Có vẻ như kể từ PostGIS 2.0 (có thể trước đó), bạn cũng có thể thực hiện việc này bằng ST_Lengthcách ghi lại hình học vào địa lý:

ST_Length(geom::geography)

Ví dụ: khoảng cách giữa 50 ° N, 12 ° E và 51 ° N, 13 ° E:

SELECT ST_Length(geom) AS deg,
       ST_Length(geom::geography)/1000 AS km_1,
       ST_Length_Spheroid(geom, 'SPHEROID["WGS 84",6378137,298.257223563]')/1000 as km_2
FROM   ST_GeomFromText('LINESTRING(12 50, 13 51)' , 4326) AS geom

cái nào cho

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384


0

Sử dụng công thức sau:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
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.