В чем разница между ST_DWithin и ST_Distance для поиска близости в PostGIS?

14

У меня есть записи, хранящиеся в таблице с координатами широты / долготы, хранящихся в поле геометрии. Я хочу найти все записи рядом с предоставленной пользователем контрольной точкой. Обратите внимание, что «рядом», вероятно, означает менее 100 км (возможно, даже меньше).

Большинство примеров я вижу использование ST_DWithin. Есть ли причина, которую вы не можете использовать ST_Distance? В чем разница между использованием ST_DWithinи ST_Distanceдля этого?

Например:

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

против

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_Distance(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326)) < 1
пользователь
источник

Ответы:

15

ST_Distance - это вычисление, которое должно выполняться и оцениваться в каждой строке. ST_DWinin может использовать индекс, поэтому он, вероятно, будет намного быстрее.

Винс
источник
4
Также удалось найти то, что говорит примерно то же самое: postgis.net/2013/08/26/tip_ST_DWithin
пользователь