Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengira Jarak Bulatan Hebat Menggunakan Hanya MySQL?

Bagaimanakah Saya Boleh Mengira Jarak Bulatan Hebat Menggunakan Hanya MySQL?

Susan Sarandon
Susan Sarandonasal
2024-12-26 14:18:11554semak imbas

How Can I Calculate Great Circle Distance Using Only MySQL?

MySQL Great Circle Distance (Haversine Formula)

Artikel ini menangani cabaran untuk mengira jarak bulatan besar antara dua koordinat geografi menggunakan MySQL semata-mata . Pelaksanaan PHP tradisional, yang melibatkan berbilang pertanyaan SQL dan pengiraan yang rumit, boleh menyusahkan.

Penyelesaian

Untuk menukar kod PHP kepada MySQL tulen, kami memanfaatkan formula Haversine , persamaan matematik yang mengira jarak antara dua titik pada sfera. Formula ini disokong oleh fungsi MySQL ACOS() dan RADIANS().

Berikut ialah pertanyaan MySQL yang sepadan:

SELECT id, (
  3959 * ACOS(
    COS(RADIANS(37)) * COS(RADIANS(lat))
    * COS(RADIANS(lon) - RADIANS(-122)) + SIN(RADIANS(37)) * SIN(RADIANS(lat))
  )
) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0, 20;

Penjelasan

  • Pertanyaan memilih id dan jarak yang dikira daripada penanda jadual.
  • Fungsi ACOS() mengira sudut antara dua titik, yang kemudiannya didarabkan dengan 3959 (jejari Bumi dalam batu atau 6371 untuk kilometer).
  • RADIAN() fungsi menukarkan koordinat kepada radian.
  • Klausa HAVING menapis hasil yang jaraknya kurang daripada 25 batu (atau kilometer).
  • Klausa ORDER BY mengisih keputusan mengikut jarak dalam tertib menaik.
  • Klausa LIMIT mengehadkan bilangan keputusan kepada 20.

Dengan menggunakan pendekatan berasaskan MySQL ini, anda boleh mengira dengan cekap jarak bulatan antara koordinat tanpa memerlukan pengiraan PHP luaran atau SQL tambahan pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Jarak Bulatan Hebat Menggunakan Hanya 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