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