¿Cuál es la diferencia entre ST_DWithin y ST_Distance para la búsqueda de proximidad en PostGIS?

14

Tengo registros almacenados en una tabla con coordenadas de latitud / longitud almacenadas en un campo de geometría. Quiero encontrar todos los registros cercanos a un punto de referencia proporcionado por el usuario. Tenga en cuenta que "cerca" probablemente significa menos de 100 km (posiblemente incluso más pequeño).

La mayoría de los ejemplos que veo uso ST_DWithin. ¿Hay alguna razón que no puedas usar ST_Distance? ¿Cuál es la diferencia entre usar ST_DWithiny ST_Distancehacer esto?

Por ejemplo:

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
Usuario
fuente

Respuestas:

15

ST_Distance es un cálculo que debe ejecutarse y evaluarse en cada fila. ST_DWithin puede usar un índice, por lo que es probable que sea mucho más rápido.

Vince
fuente
44
También logré encontrar esto que dice más o menos lo mismo: postgis.net/2013/08/26/tip_ST_DWithin
Usuario