Mendapatkan panjang geometri dalam meter?


13

Dalam PostGIS, ST_length()fungsi mengembalikan panjang linestring di beberapa unit, tetapi tidak dalam meter.

Apakah ada fungsi seperti ST_Length()tetapi dalam meter?

Jawaban:


11

St_Length () mengembalikan panjang dalam satuan Sistem Referensi Tata Ruang. Jika Anda ingin mendapatkan meter, Anda perlu mengubah fitur Anda ke SRS berbeda yang menggunakan meter sebagai unit. Ini bisa dilakukan sambil jalan, jadi jangan khawatir tentang penulisan set data lain.

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

Dalam contoh ini, SRID 26915 adalah UTM Zone 15 N, NAD83.


Atau cukup tambahkan bidang Anda sendiri dan kelola perhitungan sendiri. CATATAN Anda harus menulis pemicu Anda sendiri atau menghitung ulang pada perubahan panjang Anda.
Brad Nesom

18

Sepertinya sejak PostGIS 2.0 (mungkin sebelumnya) Anda juga bisa melakukan ini dengan ST_Lengthmenyusun kembali geometri ke geografi:

ST_Length(geom::geography)

Misalnya, jarak antara 50 ° N, 12 ° E dan 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

pemberian yang mana

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


0

Gunakan rumus berikut:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.