Qual é a diferença entre ST_DWithin e ST_Distance para pesquisa por proximidade no PostGIS?

14

Eu tenho registros armazenados em uma tabela com coordenadas de latitude / longitude armazenadas em um campo de geometria. Desejo encontrar todos os registros próximos a um ponto de referência fornecido pelo usuário. Nota "nas proximidades" provavelmente significa menos de 100 km (possivelmente até menor).

A maioria dos exemplos que vejo são úteis ST_DWithin. Existe um motivo para você não usar ST_Distance? Qual é a diferença entre usar ST_DWithine ST_Distancefazer isso?

Por exemplo:

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
Do utilizador
fonte

Respostas:

15

ST_Distance é um cálculo que deve ser executado e avaliado em todas as linhas. ST_DWithin pode usar um índice, então é provável que seja muito mais rápido.

Vince
fonte
4
Também consegui encontrar isso que diz praticamente a mesma coisa: postgis.net/2013/08/26/tip_ST_DWithin
User