Jaka jest różnica między ST_DWithin a ST_Distance dla wyszukiwania zbliżeniowego w PostGIS?

14

Mam rekordy zapisane w tabeli ze współrzędnymi szerokości i długości geograficznej zapisanymi w polu geometrii. Chcę znaleźć wszystkie rekordy w pobliżu punktu odniesienia podanego przez użytkownika. Uwaga „w pobliżu” prawdopodobnie oznacza mniej niż 100 km (być może nawet mniejszy).

Większość przykładów używam ST_DWithin. Czy istnieje powód, dla którego nie możesz użyć ST_Distance? Jaka jest różnica między używaniem ST_DWithina ST_Distancerobieniem tego?

Na przykład:

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
Użytkownik
źródło

Odpowiedzi:

15

ST_Distance to obliczenie, które należy wykonać i ocenić w każdym wierszu. ST_DWithin może używać indeksu, więc prawdopodobnie będzie znacznie szybszy.

Vince
źródło
4
Udało mi się również znaleźć to, co mówi prawie to samo: postgis.net/2013/08/26/tip_ST_DWithin
Użytkownik