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?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-06 12:23:41392semak imbas

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)

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