Retorna true se dois objetos espaciais estiverem dentro de uma distância especificada entre si e false caso contrário. Diferentemente da ST_Distance, a ST_DWithin usa automaticamente os índices espaciais disponíveis, sendo a opção padrão para consultas de proximidade.
Sintaxe
boolean ST_DWithin(geometry g1, geometry g2, double precision distanceOfSrid);
boolean ST_DWithin(geography gg1, geography gg2, double precision distanceMeters);
boolean ST_DWithin(geography gg1, geography gg2, double precision distanceMeters, boolean useSpheroid);
Parâmetros
|
Parâmetro |
Tipo |
Descrição |
|
|
geometry |
O primeiro objeto de geometria. |
|
|
geometry |
O segundo objeto de geometria. |
|
|
double precision |
A distância limite, na unidade definida pelo sistema de referência espacial (SRS) dos objetos de geometria. |
|
|
geography |
O primeiro objeto de geografia. |
|
|
geography |
O segundo objeto de geografia. |
|
|
double precision |
A distância limite, em metros. |
|
|
boolean |
Define se o sistema de referência elipsoidal deve ser usado. Esse sistema fornece resultados mais precisos, mas com desempenho ligeiramente inferior. |
Observações de uso
Se ambos os argumentos forem do tipo
geometry, eles devem compartilhar o mesmo identificador de referência espacial (SRID).Para argumentos do tipo
geography, a distância é medida em metros por padrão.A função compara caixas delimitadoras com todos os índices espaciais disponíveis. Assim, as verificações de proximidade são aceleradas por índice por design.
Use ST_3DDWithin para verificar proximidade em 3D.
Exemplos
Diferença entre ST_DWithin e ST_DFullyWithin
A ST_DWithin retorna true quando a menor distância entre os dois objetos está dentro do limiar estabelecido. Já a ST_DFullyWithin aplica um critério mais restritivo: todos os pontos de ambos os objetos precisam estar dentro do limiar.
SELECT ST_DFullyWithin(g1, g2, 2), ST_DWithin(g1, g2, 2)
FROM (
SELECT 'LINESTRING(0 1,1 1)'::geometry AS g1,
'LINESTRING(0 0,0 -1)'::geometry AS g2
) AS test;
Saída esperada:
st_dfullywithin | st_dwithin
-----------------+------------
f | t
(1 row)
Próximos passos
ST_DFullyWithin: verifica se todos os pontos de dois objetos estão dentro de uma distância especificada
ST_3DDWithin: verificação de proximidade para objetos 3D em um sistema de coordenadas projetadas