sql >> Databasteknik >  >> RDS >> PostgreSQL

hitta den närmaste platsen efter latitud och longitud i postgresql

PostGIS

Förvara inte lat och long på ett sånt bord. Använd istället en PostGIS-geometri eller geografityp .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

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

Nu när du behöver fråga det kan du använda KNN (<-> ) som faktiskt kommer att göra detta på ett index.

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

I din fråga har du uttryckligen HAVING distance < 5 . Du kan också göra det på indexet.

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;

Detta säkerställer att ingenting returneras om alla punkter ligger utanför distance_in_meters .

Dessutom är x och y decimaltal ST_MakePoint(46.06, 14.505)



  1. Oracle:Vad betyder "kör omedelbart"?

  2. Är det säkert att jämföra strängar med "större än" och "mindre än" i MySQL?

  3. php:laddning av oracle-drivrutin ger fel Det går inte att ladda dynamiskt bibliotek - Den angivna proceduren kunde inte hittas.

  4. Extrahera dag/månad/år från en tidsstämpel på MYSQL