Apa perbedaan antara ST_DWithin dan ST_Distance untuk pencarian kedekatan di PostGIS?


14

Saya memiliki catatan yang disimpan di tabel dengan koordinat lintang / bujur yang disimpan di bidang geometri. Saya ingin menemukan semua catatan di dekat titik referensi yang disediakan pengguna. Catatan "di dekatnya" mungkin berarti kurang dari 100 km (mungkin lebih kecil).

Sebagian besar contoh yang saya lihat digunakan ST_DWithin. Apakah ada alasan yang tidak bisa Anda gunakan ST_Distance? Apa perbedaan antara menggunakan ST_DWithindan ST_Distancemelakukan ini?

Sebagai contoh:

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_DWithin(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326), 1)

vs.

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_Distance(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326)) < 1

Jawaban:


15

ST_Distance adalah perhitungan yang harus dijalankan dan dievaluasi pada setiap baris. ST_DWithin dapat menggunakan indeks, jadi sepertinya akan jauh lebih cepat.


4
Juga berhasil menemukan ini yang mengatakan hal yang hampir sama: postgis.net/2013/08/26/tip_ST_DWithin
Pengguna
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.