sql >> Database teknologi >  >> RDS >> PostgreSQL

find den nærmeste placering efter bredde- og længdegrad i postgresql

PostGIS

Opbevar ikke lat og long på sådan et bord. Brug i stedet en PostGIS-geometri eller geografitype .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

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

Når du nu skal forespørge på det, kan du bruge KNN (<-> ) som faktisk vil gøre dette på et indeks.

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

I din forespørgsel har du eksplicit HAVING distance < 5 . Du kan også gøre det på indekset.

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;

Dette sikrer, at intet returneres, hvis alle punkter ligger uden for distance_in_meters .

Ydermere er x og y decimaltal ST_MakePoint(46.06, 14.505)



  1. Hvordan udfører man IF-sætning i SQL?

  2. Gratis felthospitalsdatabase til at bekæmpe COVID-19-pandemien

  3. Hvordan fjerner jeg enkelte anførselstegn fra en tabel i postgresql?

  4. Konverter mysqli-paginering til forberedt erklæringspaginering