PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

trouver l'emplacement le plus proche par latitude et longitude dans postgresql

PostGIS

Ne rangez pas lat et long sur une table comme ça. Utilisez plutôt une géométrie PostGIS ou un type de géographie .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

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

Désormais, lorsque vous devez l'interroger, vous pouvez utiliser KNN (<-> ) qui le fera réellement sur un index.

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

Dans votre requête, vous avez explicitement HAVING distance < 5 . Vous pouvez également le faire sur l'index.

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;

Cela garantit que rien n'est renvoyé si tous les points se trouvent en dehors de distance_in_meters .

De plus x et y sont des nombres décimaux ST_MakePoint(46.06, 14.505)