Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Jarak Antara Dua Bandar Menggunakan MySQL?

Bagaimana untuk Mengira Jarak Antara Dua Bandar Menggunakan MySQL?

Barbara Streisand
Barbara Streisandasal
2024-12-15 01:13:17364semak imbas

How to Calculate the Distance Between Two Cities Using MySQL?

Kira Jarak Antara Koordinat Geografi Menggunakan MySQL

Soalan:

Anda mempunyai jadual yang mengandungi data bandar dengan latitud dan longitud koordinat. Anda perlu mengira jarak antara dua bandar tertentu dari jadual ini. Bimbing kami melalui proses tersebut.

Jawapan:

Untuk mengira jarak antara dua titik menggunakan latitud dan longitudnya, kita boleh menggunakan formula undang-undang kosinus sfera dalam MySQL. Berikut ialah penyelesaian terperinci:

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

Dalam pertanyaan ini, kami melakukan penyambungan sendiri pada jadual bandar untuk mendapatkan semula pasangan koordinat bagi kedua-dua bandar. Kami kemudiannya menggunakan formula undang-undang kosinus sfera untuk mengira jarak antara mereka, yang diberikan dalam kilometer.

Nota:

Jika anda lebih suka mempunyai jarak dalam statut batu dan bukannya kilometer, gantikan pemalar 111.111 dengan 69.0.

Sebagai alternatif, untuk pendekatan yang lebih moden:

Seperti yang dicadangkan oleh Alexio Vay, anda boleh menggunakan fungsi ST_Distance_Sphere() dalam MySQL, yang menyediakan ringkas dan cara yang cekap untuk mengira jarak antara dua titik:

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

Atas ialah kandungan terperinci Bagaimana untuk Mengira Jarak Antara Dua Bandar Menggunakan 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