Maison >base de données >tutoriel mysql >Comment puis-je calculer la distance entre deux emplacements en utilisant la latitude et la longitude dans MySQL ?

Comment puis-je calculer la distance entre deux emplacements en utilisant la latitude et la longitude dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 10:49:11347parcourir

How Can I Calculate the Distance Between Two Locations Using Latitude and Longitude in MySQL?

Calcul de la distance entre points à l'aide de la latitude et de la longitude dans MySQL

Souvent, il devient nécessaire de déterminer la distance entre deux emplacements en fonction de leur latitude et coordonnées longitudinales. Il s'agit d'une tâche courante dans de nombreux scénarios, tels que la recherche de commodités à proximité ou le calcul des distances de déplacement. Pour calculer avec précision cette distance, MySQL propose une solution puissante.

Considérons un scénario dans lequel nous avons un tableau avec les noms de villes, les valeurs de latitude et de longitude :

--------------------------------------------
| id  |  city  |  Latitude  |  Longitude  |
--------------------------------------------
| 1   |   3    |   34.44444 |   84.3434   |
--------------------------------------------
| 2   |   4    | 42.4666667 | 1.4666667   |
--------------------------------------------
| 3   |   5    |  32.534167 | 66.078056   |
--------------------------------------------
| 4   |   6    |  36.948889 | 66.328611   |
--------------------------------------------
| 5   |   7    |  35.088056 | 69.046389   |
--------------------------------------------
| 6   |   8    |  36.083056 |   69.0525   |
--------------------------------------------
| 7   |   9    |  31.015833 | 61.860278   |
--------------------------------------------

Supposons que nous voulions calculer la distance entre la ville 3 et la ville 7. A l'aide de la requête SQL fournie, nous pouvons récupérer la distance en kilomètres :

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

La requête exploite le loi du cosinus sphérique pour calculer la distance, qui est exprimée en kilomètres.

Pour plus d'efficacité et de précision, il est préférable d'utiliser une approche moderne, telle que la suivante :

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

En employant Avec les fonctions MySQL adaptées, nous pouvons déterminer avec précision la distance entre deux points du globe, ce qui nous permet de répondre à un large éventail d'exigences liées à la géolocalisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn