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

Eu quero exibir em arquivos postgis com menos de 10.000 metros e sua distância calculada


A maneira mais fácil e rápida de fazer isso seria armazenar as coordenadas como geometry ou geography em vez de pares de coordenadas separados:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);

Depois disso, crie um índice gist sobre esta nova coluna:
CREATE INDEX idx_data_point ON data USING gist (geog) ;

Use ST_DWithin para consultar distâncias, como ST_DistanceSphere ou ST_Distance não use o índice espacial!
SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
FROM data
WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true); 
  • Observação:o true nas funções ST_DWithin e ST_Distance significa use_spheroid=true , que é o padrão para geography parâmetros.

Demonstração:db<>fiddle

Veja também:Obter todos os edifícios no alcance de 5 milhas das coordenadas especificadas