Risposta breve:
Converti semplicemente il tuo x,y valori al volo utilizzando ST_MakePoint
(attenzione alle spese generali!) e calcola la distanza da un determinato punto, l'SRS predefinito sarà WGS84
:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
Utilizzando GEOGRAPHY
otterrai il risultato in metri, usando GEOMETRY
lo darà in gradi. Naturalmente, conoscere l'SRS delle coppie di coordinate è fondamentale per calcolare le distanze, ma se si ha il controllo della qualità dei dati e le coordinate sono coerenti (in questo caso, omettendo l'SRS), non c'è molto di cui preoccuparsi. Inizierà a diventare complicato se stai pianificando di eseguire operazioni utilizzando dati esterni, dai quali non sei nemmeno a conoscenza dell'SRS e potrebbe differire dai tuoi.
Risposta lunga:
Bene, se stai usando PostGIS non dovresti usare x,y in primo luogo in colonne separate. Puoi facilmente aggiungere una colonna di geometria/geografia facendo qualcosa del genere.
Questa è la tua tavola...
CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
Contenente i seguenti dati ..
INSERT INTO places VALUES ('Budva',18.84,42.92),
('Ohrid',20.80,41.14);
Ecco come aggiungere una colonna di tipo geografico:
ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
Una volta aggiunta la colonna, ecco come convertire le coordinate in geografia/geometria e aggiornare la tabella:
UPDATE places SET geo = ST_MakePoint(lon,lat);
Per calcolare la distanza è sufficiente utilizzare la funzione ST_Distance
, come segue (distanza in metri):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
Se hai il parametro della tua posizione in WKT
, puoi anche usare:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)