Kort antwoord:
Converteer gewoon uw x,y waarden on-the-fly met behulp van ST_MakePoint
(let op de overhead!) en bereken de afstand vanaf een bepaald punt, de standaard SRS is WGS84
:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
GEOGRAPHY
gebruiken u krijgt het resultaat in meters, terwijl u GEOMETRY
. gebruikt zal het in graden geven. Natuurlijk is het noodzakelijk om de SRS van coördinatenparen te kennen voor het berekenen van afstanden, maar als u de gegevenskwaliteit onder controle hebt en de coördinaten consistent zijn (in dit geval de SRS weglaten), hoeft u zich geen zorgen te maken. Het wordt lastig als u van plan bent om bewerkingen uit te voeren met externe gegevens, waarvan u ook niet op de hoogte bent van de SRS en deze kan verschillen van de uwe.
Lang antwoord:
Welnu, als u PostGIS gebruikt, zou u x,y niet moeten gebruiken in de eerste plaats in gescheiden kolommen. U kunt eenvoudig een kolom geometrie/geografie toevoegen door zoiets als dit te doen.
Dit is jouw tafel ...
CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
Met de volgende gegevens ..
INSERT INTO places VALUES ('Budva',18.84,42.92),
('Ohrid',20.80,41.14);
Zo voegt u een kolom voor het type geografie toe:
ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
Zodra uw kolom is toegevoegd, converteert u als volgt uw coördinaten naar geografie / geometrie en werkt u uw tabel bij:
UPDATE places SET geo = ST_MakePoint(lon,lat);
Om de afstand te berekenen hoef je alleen maar de functie ST_Distance
te gebruiken
, als volgt (afstand in meters):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
Als u uw locatieparameter heeft in WKT
, kunt u ook gebruiken:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)