PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Maneira mais eficiente de encontrar pontos dentro de um determinado raio a partir de um determinado ponto


Criar um buffer para encontrar os pontos é definitivamente impossível por causa de (1) a sobrecarga de criar a geometria que representa o buffer e (2) o cálculo do ponto no polígono é muito menos eficiente do que um simples cálculo de distância.

Você obviamente está trabalhando com dados (longitude, latitude), então você deve convertê-los em um sistema de coordenadas cartesianas apropriado que tenha a mesma unidade de medida que sua distância de 10.000. Se essa distância estiver em metros, você também poderá lançar o ponto da tabela para geography e calcule diretamente nas coordenadas (longa, lat). Como você deseja apenas identificar os pontos que estão dentro da distância especificada, você pode usar o ST_DWithin() função com cálculo na esfera para aumentar a velocidade (não faça isso quando estiver em latitudes muito altas ou com distâncias muito longas):
SELECT id, point 
FROM my_table 
WHERE ST_DWithin(point::geography,
                 ST_GeogFromText('POINT(-116.768347 33.911404)'),
                 10000, false);