Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh melakukan carian jejari dengan cekap dalam pangkalan data untuk data geospatial?

Bagaimanakah saya boleh melakukan carian jejari dengan cekap dalam pangkalan data untuk data geospatial?

Linda Hamilton
Lepaskan: 2024-11-01 01:13:28
asal
730 orang telah melayarinya

How can I efficiently perform radius searches in a database for geospatial data?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan