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

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.


4
Também consegui encontrar isso que diz praticamente a mesma coisa: postgis.net/2013/08/26/tip_ST_DWithin
User
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.