Кратък отговор:
Просто конвертирайте вашите x,y стойности в движение с помощта на ST_MakePoint
(имайте предвид режийните разходи!) и изчислете разстоянието от дадена точка, SRS по подразбиране ще бъде WGS84
:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
Използване на GEOGRAPHY
ще получите резултата в метри, докато използвате GEOMETRY
ще го даде в градуси. Разбира се, познаването на SRS на координатните двойки е наложително за изчисляване на разстояния, но ако имате контрол върху качеството на данните и координатите са последователни (в този случай, пропускайки SRS), няма много повод за безпокойство. Ще започне да става трудно, ако планирате да извършвате операции, използвайки външни данни, от които също не знаете за SRS и може да се различава от вашия.
Дълъг отговор:
Е, ако използвате PostGIS, не трябва да използвате x,y в отделни колони на първо място. Можете лесно да добавите колона за геометрия/география, като направите нещо подобно.
Това е вашата маса...
CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
Съдържа следните данни ..
INSERT INTO places VALUES ('Budva',18.84,42.92),
('Ohrid',20.80,41.14);
Ето как добавяте колона за географски тип:
ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
След като колоната ви бъде добавена, ето как преобразувате координатите си в география/геометрия и актуализирате таблицата си:
UPDATE places SET geo = ST_MakePoint(lon,lat);
За да изчислите разстоянието, трябва само да използвате функцията ST_Distance
, както следва (разстояние в метри):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
Ако имате вашия параметър за местоположение в WKT
, можете също да използвате:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)