Maison >développement back-end >Tutoriel Python >Comment la formule Haversine calcule-t-elle la distance et le relèvement entre les points GPS en Python ?

Comment la formule Haversine calcule-t-elle la distance et le relèvement entre les points GPS en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 18:41:10563parcourir

How Does the Haversine Formula Calculate Distance and Bearing Between GPS Points in Python?

Formule Haversine en Python : Calculer la distance et le relèvement entre les points GPS

Dans le monde de la navigation, déterminer la distance et le relèvement entre deux points GPS est crucial. La formule Haversine fournit un moyen précis de calculer ces valeurs en utilisant la géométrie sphérique.

Calcul de la distance à l'aide de la formule Haversine

Pour calculer la distance entre deux points GPS, nous devons convertir leurs latitudes et longitudes. des degrés décimaux aux radians. On applique alors la formule :

dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon/2) ** 2
c = 2 * asin(sqrt(a))
distance = c * r

où dlon et dlat représentent les différences de longitude et de latitude, a est une valeur intermédiaire, et r est le rayon de la Terre (6371 kilomètres pour les kilomètres ou 3956 milles pour miles).

Calcul du relèvement à l'aide de la formule Haversine

En plus de déterminer la distance, nous pouvons également trouver le relèvement (azimut) du premier point au deuxième point en utilisant la formule de Haversine :

y = sin(dlon) * cos(lat2)
x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dlon)
bearing = atan2(y, x)

où dlon est la différence de longitude, lat1 et lat2 sont les latitudes des deux points, x et y sont des valeurs intermédiaires , et le relèvement représente l'azimut mesuré en radians à partir du nord dans le sens des aiguilles d'une montre.

Implémentation de Python

Voici un Python mise en œuvre de la formule Haversine pour le calcul de la distance et du relèvement :

from math import radians, cos, sin, asin, sqrt

def haversine(lon1, lat1, lon2, lat2):
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a))
    r = 6371

    return c * r

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