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

encuentre la ubicación más cercana por latitud y longitud en postgresql

PostGIS

No almacene latitud y longitud en una tabla como esa. En su lugar, utilice una geometría de PostGIS o tipo de geografía .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

INSERT INTO foo (geog)
  VALUES (ST_MakePoint(x,y));

Ahora, cuando necesite consultarlo, puede usar KNN (<-> ) que en realidad hará esto en un índice.

SELECT *
FROM foo
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

En su consulta, tiene explícitamente HAVING distance < 5 . También puede hacer eso en el índice.

SELECT *
FROM foo
WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Esto garantiza que no se devuelva nada si todos los puntos se encuentran fuera de distance_in_meters .

Además x e y son números decimales ST_MakePoint(46.06, 14.505)