PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengkonfigurasi PostgreSQL dengan Postgis untuk menghitung jarak

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengelompokan SQL baris yang saling berpotongan/tumpang tindih

  2. Apakah ada cara untuk menonaktifkan pembaruan/penghapusan tetapi masih mengizinkan pemicu untuk melakukannya?

  3. Bisakah saya menetapkan (dalam dbase) batas ukuran pada bidang byte di PostgreSQL?

  4. findById() memberikan Tidak ada Id properti yang ditemukan

  5. Kesalahan:tidak dapat menentukan versi PostgreSQL dari '10.3' - Django di Heroku