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?

José Alejandro
sumber

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.

DavidF
sumber
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
andybega
sumber
0

Gunakan rumus berikut:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Loni
sumber