sql >> Base de Datos >  >> RDS >> PostgreSQL

Quiero mostrar en archivos postgis que tengan menos de 10,000 metros y su distancia calculada

La forma más fácil y rápida de hacerlo sería almacenar las coordenadas como geometry o geography en lugar de pares de coordenadas separados:

ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);

Después de eso, cree un índice esencial sobre esta nueva columna:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Usa ST_DWithin para consultar distancias, como ST_DistanceSphere o ST_Distance no ¡usa el í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); 
  • Nota:el true en las funciones ST_DWithin y ST_Distance significa use_spheroid=true , que es el predeterminado para geography parámetros.

Demostración:db<>fiddle

Consulte también:Obtener todos los edificios en un rango de 5 millas desde las coordenadas especificadas