Qual è la differenza tra ST_DWithin e ST_Distance per la ricerca di prossimità in PostGIS?


14

Ho dei record memorizzati in una tabella con coordinate di latitudine / longitudine memorizzate in un campo della geometria. Voglio trovare tutti i record nelle vicinanze di un punto di riferimento fornito dall'utente. Nota "nelle vicinanze" probabilmente significa meno di 100 km (forse anche più piccolo).

La maggior parte degli esempi che vedo usare ST_DWithin. C'è un motivo che non puoi usare ST_Distance? Qual è la differenza tra usare ST_DWithine ST_Distancefare questo?

Per esempio:

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

Risposte:


15

ST_Distance è un calcolo che deve essere eseguito e valutato su ogni riga. ST_DWithin può utilizzare un indice, quindi è probabile che sia molto più veloce.


4
Sono anche riuscito a trovare questo che dice praticamente la stessa cosa: postgis.net/2013/08/26/tip_ST_DWithin
Utente
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.