Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Nilai basis data kueri berdasarkan lokasi pengguna

Ada pertanyaan yang membandingkan kemampuan berbagai basis data spasial, GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server? , di mana Postgis keluar sebagai pemenang yang cukup jelas atas MySQL.

Baik Anda menggunakan MySQL atau Postgis, Anda akan jauh lebih baik, jika bisa, menyimpan nilai lintang dan bujur Anda sebagai geometri/geografi (Titik), sebagai fungsi yang dapat digunakan untuk menemukan hal-hal di sekitar, ST_Distance , ST_Distance_Sphere dan operator <-> yang lebih tidak jelas , lihat Temukan Tetangga Terdekat untuk diberikan Point menggunakan PostGIS? (misalnya penggunaan) bekerja langsung pada kolom geometri/geografi. Lebih penting lagi, Anda dapat menambahkan indeks spasial , di mana fungsi-fungsi ini perlu bekerja dengan baik, yang akan mengungguli pencarian pada kolom garis lintang dan garis bujur yang diindeks secara terpisah dengan margin yang besar (ini akan bergantung pada ukuran tabel, tetapi akan bertambah seiring dengan bertambahnya ukuran tabel),

Di Postgis, Anda dapat mengonversi lat dan lon menjadi geometri dengan:

alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

Pada titik ini, Anda akan dapat melakukan kueri yang sangat efisien untuk menemukan titik di dekat titik lain, menggunakan salah satu contoh di tautan di atas.

Anda dapat melakukan hal serupa di MySQL, meskipun tidak mendukung sistem referensi spasial, yaitu 4326 di atas, yang berarti lat/lon, dan tidak memiliki fungsi ST_MakePoint, jadi Anda perlu menggunakan STGeomFromText dan menggabungkan lat/ lon bersama-sama untuk membuat POIN. Itu juga melakukan segalanya dalam koordinat planar, seperti yang telah dinyatakan Claudio dan yang lainnya, yang tidak menjadi masalah dengan Postgis.

Saya minta maaf atas jawaban yang panjang dan agak tangensial, tetapi setelah melakukan berbagai migrasi antar database pada data dalam jumlah besar (MySQL, SQL Server dan Postgres/GIS) dan membuat banyak kesalahan dalam perjalanan, saya harap saya dapat membuat Anda marah arah yang benar (dan tambahkan sedikit pemeriksaan di masa mendatang, jika Anda ingin mulai menggunakan beberapa fungsi spasial lainnya, yang dimiliki Postigs).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan Antara Database SQL &NoSQL – Perbandingan MySQL &MongoDB

  2. Desain database mesin rekomendasi?

  3. Pagination Akurat dengan Gabung kiri

  4. Klarifikasi urutan bergabung untuk pembuatan tabel sementara

  5. SQL:Bagaimana kita bisa membuat tabel1 BERGABUNG dengan tabel2 PADA tabel yang diberikan dalam bidang di tabel1?