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

postgresql postgis Jika titik di dalam lingkaran

Pertama - saya berasumsi bahwa lat_long adalah kolom tipe geografi. Jika ini adalah kolom tipe geometri, Anda harus memodifikasi contoh saya ke beberapa EPSG lain (mungkin 3857 metrik EPSG untuk seluruh dunia). Ini sangat penting karena st_dwithin check in meter untuk tipe geopraphy , dan dalam satuan peta untuk geometri (dan untuk EPSG 4326 satuan adalah derajat bukan meter)

Masukkan data Anda seperti ini

insert into car_wash values (1,'aaa',st_setsrid(st_makepoint(54.51, 22.54),4326))

Saya menjelaskan mengapa menggunakan st_setsrid, st_makepoint, dan apa itu 4326.- 4326 adalah EPSG 4326 - ini adalah sistem referensi koordinat yang paling dikenal (di mana Anda memiliki derajat lat dan panjang).

  • st_makepoint - akan membuat titik geografi dari koordinat lat dan long Anda. Ini akan terlihat seperti byte, tapi jangan khawatir, jika Anda membutuhkan lat dan long untuk beberapa alasan, Anda bisa mendapatkannya dengan fungsi st_x() dan st_y() atau st_astext(). Hal terbaik dari memiliki geom atau geog (dalam hal ini) adalah Anda dapat menggunakan Gist index. Alat yang sangat kuat yang mempercepat kueri geografis Anda.

  • st_setsrid - st_makepoint akan membuat titik tetapi dengan srid=0. Anda harus memberi tahu POSTGIS dalam EPSG apa yang seharusnya membaca data Anda. Misalnya jika Anda menyuruhnya untuk membacanya dengan 4326 itu akan berada di tempat yang benar di peta dunia google, tetapi jika Anda mengatakan misalnya 3857 itu akan berada di tempat yang sama sekali berbeda, karena 3857 adalah sistem metrik bukan derajat sehingga akan menjadi sekitar 50 dan 50 meter dari pojok kiri bawah (atau mungkin kiri atas, lupa)

Buat indeks di geog

create index on car_wash using gist (geog);

Kami memiliki tabel, kami memiliki data di dalamnya dan indeks di atasnya. Sekarang kami ingin memeriksa apakah tempat Anda dekat dengan tempat cuci mobil Anda.

select *
  from car_wash cw
 where ST_DWithin (cw.geog,ST_GeogFromtext('SRID=4326;POINT(54.21 22.54)'),1000)
  AND cw.was_deleted=false

Dalam ST_DDalam parameter ketiga adalah jarak dalam meter (georpahy) atau satuan peta (geometri). Jadi dalam hal ini akan menunjukkan kepada Anda semua pencucian mobil yang berjarak hingga 1000 meter dari lokasi pengguna Anda dan tidak dihapus.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django memodelkan satu kunci asing ke banyak tabel

  2. Nonaktifkan pembungkus dalam output Psql

  3. jOOQ masukkan ke .. di mana tidak ada untuk Postgres

  4. XPath1 di SQL/XML, elemen hitungan kembali kosong

  5. Rake db:jangan bersihkan meja lama saya