Jawaban singkat:
Cukup konversikan x,y . Anda nilai dengan cepat menggunakan ST_MakePoint
(ingat overhead!) dan hitung jarak dari titik tertentu, SRS default adalah WGS84
:
SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
Menggunakan GEOGRAPHY
Anda akan mendapatkan hasilnya dalam meter, saat menggunakan GEOMETRY
akan memberikannya dalam derajat. Tentu saja, mengetahui SRS dari pasangan koordinat sangat penting untuk menghitung jarak, tetapi jika Anda memiliki kendali atas kualitas data dan koordinatnya konsisten (dalam hal ini, menghilangkan SRS), tidak banyak yang perlu dikhawatirkan. Ini akan mulai menjadi rumit jika Anda berencana untuk melakukan operasi menggunakan data eksternal, dari mana Anda juga tidak mengetahui SRS dan mungkin berbeda dari Anda.
Jawaban panjang:
Nah, jika Anda menggunakan PostGIS, Anda tidak boleh menggunakan x,y di kolom terpisah di tempat pertama. Anda dapat dengan mudah menambahkan kolom geometri / geografi dengan melakukan hal seperti ini.
Ini meja Anda ...
CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
Berisi data berikut ..
INSERT INTO places VALUES ('Budva',18.84,42.92),
('Ohrid',20.80,41.14);
Inilah cara Anda menambahkan kolom jenis geografi:
ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
Setelah kolom Anda ditambahkan, beginilah cara Anda mengubah koordinat menjadi geografi / geometri dan memperbarui tabel Anda:
UPDATE places SET geo = ST_MakePoint(lon,lat);
Untuk menghitung jarak Anda hanya perlu menggunakan fungsi ST_Distance
, sebagai berikut (jarak dalam meter):
SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)
Jika Anda memiliki parameter lokasi di WKT
, Anda juga dapat menggunakan:
SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
st_distance
-----------------
686560.16822422
430876.07368955
(2 Zeilen)