Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Jarak Antara Dua Titik Menggunakan Latitud dan Longitud dalam MySQL?

Bagaimana untuk Mengira Jarak Antara Dua Titik Menggunakan Latitud dan Longitud dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-12-18 12:05:20606semak imbas

How to Calculate the Distance Between Two Points Using Latitude and Longitude in MySQL?

Mengira Jarak Antara Dua Titik Menggunakan Latitud dan Longitud dalam MySQL

Untuk menentukan jarak antara dua titik diberi latitud dan longitudnya, MySQL menyediakan formula yang berkuasa. Dalam senario ini, seorang pengguna berada di bandar 3 dan berusaha untuk mencari jarak kepada pengguna di bandar lain, seperti bandar 7.

Penyelesaian terletak pada menggunakan pertanyaan berikut:

SELECT a.city AS from_city, b.city AS to_city, 
   111.111 *
    DEGREES(ACOS(LEAST(1.0, COS(RADIANS(a.Latitude))
         * COS(RADIANS(b.Latitude))
         * COS(RADIANS(a.Longitude - b.Longitude))
         + SIN(RADIANS(a.Latitude))
         * SIN(RADIANS(b.Latitude))))) AS distance_in_km
  FROM city AS a
  JOIN city AS b ON a.id <> b.id
 WHERE a.city = 3 AND b.city = 7

Pertanyaan ini menggunakan formula hukum kosinus sfera, yang mengira jarak dalam kilometer antara dua titik pada sfera. Ia bergabung dengan jadual itu sendiri, membenarkan pengambilan semula dua pasangan koordinat untuk pengiraan.

Hasil pertanyaan ini akan memberikan jarak antara bandar 3 dan bandar 7 dalam kilometer. Untuk mendapatkan jarak dalam batu statut, cuma gantikan pemalar 111.1111 dengan 69.0.

Untuk kecekapan dalam mencari titik berdekatan, pertimbangkan untuk menggunakan fungsi ST_Distance_Sphere:

select ST_Distance_Sphere(
    point(-87.6770458, 41.9631174),
    point(-73.9898293, 40.7628267)) 

Sebagai alternatif, pengiraan kotak sempadan boleh digunakan untuk mengoptimumkan lagi carian.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Jarak Antara Dua Titik Menggunakan Latitud dan Longitud dalam 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