Was ist der Unterschied zwischen ST_DWithin und ST_Distance für die Umgebungssuche in PostGIS?

14

Ich habe Datensätze in einer Tabelle mit Breiten- / Längenkoordinaten in einem Geometriefeld gespeichert. Ich möchte alle Datensätze in der Nähe eines vom Benutzer angegebenen Referenzpunkts finden. Hinweis: "In der Nähe" bedeutet wahrscheinlich weniger als 100 km (möglicherweise sogar noch kleiner).

Die meisten Beispiele, die ich sehe, verwenden ST_DWithin. Gibt es einen Grund, den Sie nicht verwenden können ST_Distance? Was ist der Unterschied zwischen der Verwendung von ST_DWithinund ST_Distance, um dies zu tun?

Beispielsweise:

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
Benutzer
quelle

Antworten:

15

ST_Distance ist eine Berechnung, die in jeder Zeile ausgeführt und ausgewertet werden muss. ST_DWithin kann einen Index verwenden, daher ist dieser wahrscheinlich viel schneller.

Vince
quelle
4
Es ist auch gelungen, dies zu finden, was fast
User