Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengoptimumkan Pertanyaan GeoSpatial dalam MySQL untuk Alamat Dalam Radius?

Bagaimana untuk Mengoptimumkan Pertanyaan GeoSpatial dalam MySQL untuk Alamat Dalam Radius?

DDD
DDDasal
2024-11-02 03:23:02271semak imbas

How to Optimize GeoSpatial Queries in MySQL for Addresses Within a Radius?

MySQL dalam Julat Geospatial Query untuk Peta

Menyiasat data geografi daripada pangkalan data yang besar untuk memaparkan lokasi tertentu dalam julat tertentu ialah cabaran biasa dalam aplikasi pemetaan. Soalan ini meneroka cara untuk mengoptimumkan pengambilan semula alamat dalam radius 5 batu dari geolokasi yang diberikan pengguna.

Formula Haversine untuk Pengiraan Jarak

Untuk menentukan jarak antara dua titik di permukaan bumi, formula Haversine digunakan. Formula matematik ini mengira jarak bulatan besar, dengan mengambil kira kelengkungan Bumi serta latitud dan longitud titik.

Pengoptimuman Pertanyaan dengan Formula Haveline

Memanfaatkan Formula Haversine, pertanyaan MySQL yang disediakan hanya mendapatkan semula alamat yang berada dalam julat yang dikehendaki:

$sql = "SELECT *, (3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $lng . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table HAVING distance < 5";

Parameter dan Pembolehubah

  • $lat **, **$lng: Koordinat lokasi semasa pengguna.
  • lat, lng: Lajur dalam jadual yang mengandungi koordinat setiap alamat .
  • 3959: Jejari bumi dalam batu (tukar kepada 6371 untuk kilometer).
  • jarak: Jarak yang dikira antara lokasi pengguna dan setiap alamat .

Hasil

Pertanyaan mengeluarkan senarai alamat dengan jarak pengiraan masing-masing. Klausa HAVING memastikan bahawa hanya alamat dalam radius 5 batu yang ditentukan diambil semula, menghasilkan pemilihan rekod yang lebih cekap dan disasarkan. Pendekatan ini secara mendadak mengurangkan jumlah data yang dipindahkan dan diproses, meningkatkan prestasi keseluruhan aplikasi pemetaan.

Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Pertanyaan GeoSpatial dalam MySQL untuk Alamat Dalam Radius?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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