Pertanyaan Pangkalan Data untuk Carian Jejari Geospatial
Dalam konteks ini, kami berhasrat untuk mengenal pasti individu yang lokasinya berada dalam kawasan jejari yang ditentukan yang diwakili oleh penanda pada peta.
Pengiraan Jejari
Untuk menentukan sama ada titik (x, y) terletak dalam bulatan berpusat (x1, y1) dengan jejari r, kami menggunakan formula berikut:
(x - x1)^2 (y - y1)^2 <= r^2
Penukaran Darjah kepada Kilometer
Untuk memastikan unit yang konsisten pada kedua-dua belah persamaan, kami menukar darjah latitud dan longitud kepada kilometer menggunakan faktor penukaran 111.12 km/darjah.
Formula Diubahsuai
Dengan penukaran digunakan, formula yang diubah suai menjadi:
((x - x1) * 111.12)^2 ((y - y1) * 111.12)^2 <= 4
di mana 4 mewakili jejari kuasa dua 2 kilometer.
Pelaksanaan SQL
Untuk melaksanakan formula ini dalam MySQL, kami membina pertanyaan yang memasangkan setiap penanda (Pengguna A ) dengan titik tengah pengguna yang hendak ditemui (Pengguna B):
<code class="sql">SELECT A.user_id, A.radius_id, A.latitude, A.longitude FROM UserA AS A JOIN (SELECT user_id, latitude, longitude FROM UserB WHERE user_id = 8) AS B ON (POW((A.latitude - B.latitude) * 111.12, 2) + POW((A.longitude - B.longitude) * 111.12, 2)) <= 4</code>
Peningkatan Ketepatan
Untuk hasil yang lebih tepat, formula boleh diubah suai kepada mengambil kira perbezaan latitud-longitud berkenaan dengan latitud:
((x - x1) * 111.12 * cos(B.latitud))^2 ((y - y1) * 111.12)^2 < = 4
atau berkenaan dengan longitud:
((x - x1) * 111.12 * cos(A.latitud))^2 ((y - y1) * 111.12)^2 < ;= 4
Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan carian jejari dengan cekap dalam pangkalan data untuk data geospatial?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!