Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencari Mata Dengan Cekap dalam Bulatan Menggunakan Sambungan Ruang MySQL?

Bagaimanakah Saya Boleh Mencari Mata Dengan Cekap dalam Bulatan Menggunakan Sambungan Ruang MySQL?

DDD
Lepaskan: 2025-01-06 12:11:40
asal
870 orang telah melayarinya

How Can I Efficiently Find Points Within a Circle Using MySQL Spatial Extensions?

Mencari Titik Dalam Bulatan Menggunakan Sambungan Ruang MySQL

Dalam senario di mana lokasi pengguna ditentukan melalui latitud dan longitud, tugas biasa ialah untuk mendapatkan semula bendera berdekatan dalam radius tertentu. Menggunakan sambungan spatial MySQL, adalah mungkin untuk melakukan pertanyaan kedekatan pada data geospatial.

Fungsi Spatial untuk Pertanyaan Bulatan

Sementara MySQL pada mulanya tidak mempunyai fungsi spatial untuk pengiraan jarak latitud/longitud , keluaran MySQL 5.7 memperkenalkan sokongan geospatial untuk sedemikian pengiraan. Untuk pertanyaan kehampiran bulat, fungsi ST_Distance_Sphere boleh digunakan.

SELECT * FROM flags
WHERE ST_Distance_Sphere(coordinates, ST_GeomFromText('POINT(latpoint longpoint)')) < 100;
Salin selepas log masuk

Dalam pertanyaan ini, koordinat mewakili lajur yang mengandungi titik geospatial, manakala titik lat dan titik panjang ialah nilai latitud dan longitud lokasi pengguna. Jejari bulatan dinyatakan dalam meter.

Pendekatan Alternatif

Sebelum MySQL 5.7, pengguna boleh menggunakan pendekatan alternatif:

  • Formula Haversine: Formula ini mengira jarak bulatan besar antara dua titik pada sfera. Ia boleh dilaksanakan menggunakan fungsi SQL seperti ACOS dan SIN.
  • Bounding Rectangle: Dengan mencipta segi empat tepat terikat mengelilingi bulatan pengguna, titik dalam segi empat tepat boleh dikenal pasti menggunakan fungsi MBRContains. Pendekatan ini mempunyai had kerana ia mungkin termasuk titik di luar bulatan sebenar.

Contoh Penggunaan

Andaikan jadual 'bendera' dengan 'koordinat' sebagai geometri lajur titik, pertanyaan berikut mendapatkan semula semua bendera dalam jarak 100m dari pengguna lokasi:

SELECT * FROM flags
WHERE ST_Distance_Sphere(coordinates, ST_GeomFromText('POINT(42.81 -70.81)')) < 100;
Salin selepas log masuk

Kesimpulan

Pelanjutan spatial MySQL menyediakan alatan berkuasa untuk pertanyaan kedekatan yang cekap pada data geospatial, termasuk keupayaan untuk mencari titik dalam bulatan berdasarkan latitud dan kedudukan longitud.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Mata Dengan Cekap dalam Bulatan Menggunakan Sambungan Ruang MySQL?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan