Rumah pangkalan data tutorial mysql Bagaimana untuk Memilih Titik Dalam Bulatan Menggunakan Sambungan Ruang dan Latitud/Longitud MySQL?

Bagaimana untuk Memilih Titik Dalam Bulatan Menggunakan Sambungan Ruang dan Latitud/Longitud MySQL?

Jan 06, 2025 pm 12:23 PM

How to Select Points Within a Circle Using MySQL Spatial Extensions and Latitude/Longitude?

Pelanjutan Spatial MySQL: Memilih Titik dalam Bulatan Berdasarkan Latitud/Longitud

Latar Belakang:

MySQL boleh menyimpan data geospatial menggunakan sambungan spatialnya. Ini membolehkan pertanyaan dan manipulasi yang cekap bagi objek spatial, termasuk titik, garisan dan poligon. Satu tugas biasa ialah memilih titik dalam jejari tertentu dari lokasi tertentu.

Menggunakan Sambungan Geospatial:

Untuk melaksanakan tugas ini, MySQL menyediakan beberapa fungsi geospatial, termasuk Penampan (), yang mewujudkan zon penampan di sekeliling titik atau garis. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa MySQL tidak menyokong pengiraan kedekatan secara asli berdasarkan latitud dan longitud.

Pendekatan Alternatif:

Untuk menentukan titik dalam bulatan berdasarkan latitud dan longitud, pendekatan yang berbeza diperlukan. Formula Jarak Bulatan Besar boleh digunakan untuk mengira jarak antara dua titik di permukaan Bumi. Ini boleh dimasukkan ke dalam pertanyaan MySQL untuk menapis titik dalam jejari tertentu.

Sampel Pertanyaan:

Pertanyaan berikut menunjukkan cara menggunakan formula Jarak Bulatan Besar untuk pilih bendera dalam radius 100 meter dari latitud dan longitud tertentu:

SELECT id, coordinates, name, r,
        units * DEGREES(ACOS(LEAST(1.0, COS(RADIANS(latpoint))
                  * COS(RADIANS(latitude))
                  * COS(RADIANS(longpoint) - RADIANS(longitude))
                  + SIN(RADIANS(latpoint))
                  * SIN(RADIANS(latitude))))) AS distance
   FROM flags
   JOIN (
        SELECT 42.81  AS latpoint,  -70.81 AS longpoint, 
               10.0 AS r, 69.0 AS units
        ) AS p ON (1=1)
  WHERE MbrContains(GeomFromText (
        CONCAT('LINESTRING(',
              latpoint-(r/units),' ',
              longpoint-(r /(units* COS(RADIANS(latpoint)))),
              ',', 
              latpoint+(r/units) ,' ',
              longpoint+(r /(units * COS(RADIANS(latpoint)))),
              ')')),  coordinates)
Salin selepas log masuk

Dalam pertanyaan ini, parameter titik lat dan titik panjang mewakili lokasi pengguna. Parameter r dan unit menentukan jejari (dalam meter) dan unit jarak setiap darjah latitud.

Pertimbangan Tambahan:

  • Pertanyaan di atas mengira jarak menggunakan formula Jarak Bulatan Besar, yang lebih tepat daripada jarak Cartesian untuk latitud dan longitud.
  • Untuk mengehadkan keputusan pada titik dalam bulatan, tambah klausa WHERE untuk menapis jarak yang kurang daripada atau sama dengan jejari.
  • Susun hasil mengikut jarak untuk memaparkan bendera terdekat pertama.
  • Pengindeksan ruang pada lajur koordinat boleh meningkatkan prestasi pertanyaan dengan ketara.

Dengan mengikuti pendekatan ini, anda boleh memilih titik dalam bulatan dengan berkesan berdasarkan latitud dan longitud, membolehkan anda mencipta aplikasi berasaskan lokasi menggunakan sambungan spatial MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Titik Dalam Bulatan Menggunakan Sambungan Ruang dan Latitud/Longitud MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Mar 18, 2025 pm 12:00 PM

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Mar 18, 2025 pm 12:01 PM

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?

See all articles