Krátká odpověď:
Stačí převést x,y hodnoty za běhu pomocí ST_MakePoint
(pozor na režii!) a vypočítat vzdálenost od daného bodu, výchozí SRS bude WGS84
:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
Pomocí GEOGRAPHY
při použití GEOMETRY
získáte výsledek v metrech dá to ve stupních. Znalost SRS párů souřadnic je samozřejmě pro výpočet vzdáleností nezbytná, ale pokud máte kontrolu nad kvalitou dat a souřadnice jsou konzistentní (v tomto případě vynechání SRS), není se čeho obávat. Začne to být složité, pokud plánujete provádět operace pomocí externích dat, ze kterých také neznáte SRS a mohou se lišit od vašich.
Dlouhá odpověď:
Pokud používáte PostGIS, neměli byste používat x,y na prvním místě v oddělených sloupcích. Sloupec geometrie / geografie můžete snadno přidat, když uděláte něco takového.
Toto je váš stůl ...
CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
Obsahující následující údaje ..
INSERT INTO places VALUES ('Budva',18.84,42.92),
('Ohrid',20.80,41.14);
Zde je návod, jak přidat sloupec typu geografie:
ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
Po přidání sloupce takto převedete souřadnice na geografii / geometrii a aktualizujete tabulku:
UPDATE places SET geo = ST_MakePoint(lon,lat);
Pro výpočet vzdálenosti stačí použít funkci ST_Distance
, takto (vzdálenost v metrech):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
Pokud máte parametr polohy v WKT
, můžete také použít:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)