Krótka odpowiedź:
Po prostu przekonwertuj swoje x,y wartości w locie za pomocą ST_MakePoint
(uwaga na koszty!) i oblicz odległość od danego punktu, domyślnym SRS będzie WGS84
:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
Korzystanie z GEOGRAPHY
wynik otrzymasz w metrach, używając GEOMETRY
da to w stopniach. Oczywiście znajomość SRS par współrzędnych jest niezbędna do obliczania odległości, ale jeśli masz kontrolę nad jakością danych, a współrzędne są spójne (w tym przypadku pomijając SRS), nie ma się czym martwić. Zacznie się to robić, jeśli planujesz wykonywać operacje na danych zewnętrznych, z których również nie wiesz o SRS i może się różnić od Twojego.
Długa odpowiedź:
Cóż, jeśli używasz PostGIS, nie powinieneś używać x,y w osobnych kolumnach w pierwszej kolejności. Możesz łatwo dodać kolumnę geometria / geografia, robiąc coś takiego.
To jest twój stół...
CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
Zawiera następujące dane ..
INSERT INTO places VALUES ('Budva',18.84,42.92),
('Ohrid',20.80,41.14);
Oto jak dodać kolumnę typu geograficznego:
ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
Po dodaniu kolumny w ten sposób konwertujesz współrzędne na geografię / geometrię i aktualizujesz tabelę:
UPDATE places SET geo = ST_MakePoint(lon,lat);
Aby obliczyć odległość wystarczy użyć funkcji ST_Distance
, jak następuje (odległość w metrach):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
Jeśli masz parametr lokalizacji w WKT
, możesz również użyć:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)