Maison >développement back-end >Tutoriel Python >Comment puis-je calculer avec précision la distance et le relèvement GPS à l'aide de la formule Haversine ?

Comment puis-je calculer avec précision la distance et le relèvement GPS à l'aide de la formule Haversine ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 08:42:11945parcourir

How Can I Accurately Calculate GPS Distance and Bearing Using the Haversine Formula?

Formule Haversine pour les calculs GPS : distance et relèvement

Problème :

Calcul de la distance et le relèvement entre deux points GPS implique souvent l'utilisation de la formule de distance Haversine. Cependant, des problèmes peuvent survenir lors de l'obtention du relèvement correct, notamment si des valeurs négatives sont produites.

Solution :

Pour calculer la distance, la formule Haversine peut être utilisée :

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

def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance in kilometers between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine formula 
    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 # Radius of earth in kilometers. Use 3956 for miles. Determines return value units.
    return c * r

Pour déterminer le roulement, ajustez la variable Bearing comme suit :

Bearing = atan2(sin(lon2-lon1)*cos(lat2), cos(lat1)*sin(lat2) - sin(lat1)*cos(lat2)*cos(lon2-lon1))
Bearing = degrees(Bearing)

Cette modification garantit que le roulement se situe entre 0 et 360 degrés.

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