Bagaimana cara saya mendapatkan nilai pengukur jarak antara dua geometri di PostGIS?

14

Saya punya pertanyaan sederhana tentang menghitung jarak di PostGIS.

Saya ingin mendapatkan jarak antara dua geometri. Saya menggunakan sid ini: 4269 dalam meter apa yang saya lakukan sekarang adalah ini: ST_Distance((a.geom,b.geom)) FROM ...tetapi saya mendapatkan hasil dalam derajat. Saya pikir saya harus bekerja dengan geografi tetapi bagaimana saya bisa melemparkan geom ke geografi? Saya mencoba dengan (a.geom :: geografi) tetapi saya mendapatkan kesalahan.

Apa yang bisa saya lakukan untuk mendapatkan hasil saya dalam meter?

Terima kasih

YassineGeoma
sumber

Jawaban:

20

dengan ST_Distance_Sphere Anda dapat mencapainya:

ST_Distance_Sphere(a.geom,b.geom)
Francisco Valdez
sumber
ERREUR: la fonction st_distance_spheroid (geometry, geometry) n'existe pas ... saya baru saja menambahkan (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]') dan sekarang sudah berfungsi, terima kasih kasih banyak!
YassineGeoma
1
baik, Anda menggunakan fungsi yang berbeda, st_distance_spheroid yang lebih lambat daripada st_distance_sphere tetapi lebih tepat.
Francisco Valdez
Bagaimana dengan jarak maksimum antara 2 geometri?
vasilakisfil
Jarak maksimum adalah earth_radius - minimum_distance, yang akan menempuh arah sebaliknya. (pos + 180º)
Francisco Valdez
1
@ don-prog Ini berfungsi untuk titik 3D dan 2D:SELECT ST_Distance_Sphere(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'), ST_GeomFromEWKT('SRID=4326;POINT(-72.1260 42.45 15)'))
Francisco Valdez
3

Satuan SRID 4269 ( NAD 83 ) bukan meter - ini adalah proyeksi geodetik , yaitu koordinatnya adalah derajat (koordinat geografis).

Jawaban pacofvf akan memberi Anda jarak dalam meter, tetapi jika Anda benar-benar telah menetapkan koordinat awal Anda dalam meter maka Anda harus menggunakan sistem koordinat yang diproyeksikan. Mungkin untuk Amerika Utara Anda menginginkan sesuatu seperti Sistem Koordinat Pesawat Negara yang memiliki sejumlah proyeksi berbeda tergantung pada wilayah mana yang ingin Anda petakan.

Saya menduga bahwa Anda hanya menggunakan nilai lat / lon jadi mungkin paragraf kedua ini tidak relevan - cukup gunakan ST_Distance_Spherefungsi seperti di atas.

Stev_k
sumber