Quelle est la différence entre ST_DWithin et ST_Distance pour la recherche de proximité dans PostGIS?

14

J'ai des enregistrements stockés dans une table avec des coordonnées de latitude / longitude stockées dans un champ de géométrie. Je souhaite trouver tous les enregistrements à proximité d'un point de référence fourni par l'utilisateur. Notez que «à proximité» signifie probablement moins de 100 km (peut-être même plus petit).

La plupart des exemples que je vois utiliser ST_DWithin. Y a-t-il une raison que vous ne pouvez pas utiliser ST_Distance? Quelle est la différence entre utiliser ST_DWithinet ST_Distancefaire cela?

Par exemple:

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

contre

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

Réponses:

15

ST_Distance est un calcul qui doit être exécuté et évalué sur chaque ligne. ST_DWinin peut utiliser un index, il est donc susceptible d'être beaucoup plus rapide.

Vince
la source
4
Également réussi à trouver ce qui dit à peu près la même chose: postgis.net/2013/08/26/tip_ST_DWithin
Utilisateur