Todos os produtos
Search
Central de documentação

ApsaraDB RDS:ST_DWithin

Última atualização: Sep 02, 2026

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

g1

geometry

O primeiro objeto de geometria.

g2

geometry

O segundo objeto de geometria.

distanceOfSrid

double precision

A distância limite, na unidade definida pelo sistema de referência espacial (SRS) dos objetos de geometria.

gg1

geography

O primeiro objeto de geografia.

gg2

geography

O segundo objeto de geografia.

distanceMeters

double precision

A distância limite, em metros.

useSpheroid

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