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
Pengguna
sumber

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.

Vince
sumber
4
Juga berhasil menemukan ini yang mengatakan hal yang hampir sama: postgis.net/2013/08/26/tip_ST_DWithin
Pengguna