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

PHP MySql dan geolokasi

Menghitung jarak menggunakan fungsi itu cukup mahal secara komputasi, karena melibatkan sejumlah besar fungsi transendental. Ini akan menjadi masalah jika Anda memiliki banyak baris untuk difilter.

Berikut ini alternatif, perkiraan yang jauh lebih murah secara komputasi:

Perkiraan jarak dalam mil:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 53.0 * (lon2 - lon1) 

Anda dapat meningkatkan akurasi perhitungan perkiraan jarak ini dengan menambahkan fungsi matematika kosinus:

Peningkatan perkiraan jarak dalam mil:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3) 

Sumber:http://www.meridianworlddata.com/Distance-Calculation.asp

Saya menjalankan banyak pengujian dengan kumpulan data yang dibuat secara acak.

  • Perbedaan akurasi untuk 3 algoritma adalah minimal , terutama pada jarak pendek
  • Algoritme yang paling lambat, tentu saja, adalah algoritma dengan fungsi trigonometri (yang ada di pertanyaan Anda). Ini 4x lebih lambat dari dua lainnya.

Pasti tidak layak. Lanjutkan dengan perkiraan.
Kode ada di sini:http://Pastebin.org/424186

Untuk menggunakan ini di MySQL, buat prosedur tersimpan yang mengambil argumen koordinat dan mengembalikan jarak, maka Anda dapat melakukan sesuatu seperti:

SELECT columns 
  FROM table 
 WHERE DISTANCE(col_x, col_y, target_x, target_y) < 25


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL UPDATE dengan sub-query yang mereferensikan tabel yang sama di MySQL

  2. Bagaimana memilih 6 bulan terakhir dari tabel berita menggunakan MySQL

  3. varchar Kenaikan Otomatis di MySQL

  4. MySQL Visual Studio 2015 Anda sudah memiliki koneksi yang dapat digunakan

  5. Cara mendapatkan single last record dengan id tertentu di codeigniter