Maison >base de données >tutoriel mysql >Comment calculer la distance entre deux coordonnées géographiques dans MySQL ?

Comment calculer la distance entre deux coordonnées géographiques dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 16:45:18230parcourir

How to Calculate the Distance Between Two Geographic Coordinates in MySQL?

Détermination de la distance entre les coordonnées géographiques dans MySQL à l'aide de la latitude et de la longitude

Votre requête utilise la formule de la loi du cosinus sphérique pour calculer la distance entre un point et tous les autres. Pour trouver la distance entre deux points spécifiques, modifiez votre requête comme suit :

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;

Cette requête récupère les paires de coordonnées de deux villes (3 et 7) et applique la formule, donnant la distance en kilomètres.

Pour les points à proximité, évitez d'utiliser des filtres basés sur la distance car ils peuvent être lents. Utilisez plutôt une technique de calcul de boîte englobante, comme décrite ici : http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/.

Solution moderne (2022)

Pour suivre les dernières technologies, pensez à utiliser le code abrégé suivant :

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

Ceci La requête utilise la fonction ST_Distance_Sphere() pour calculer la distance entre deux points.

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