Bonjour,

Ayant eu besoin de connaître la distance à vol d'oiseau entre 2 lieux connus par leurs coordonnées GPS prises sur Google Maps, je me suis fait un petit code qui marche bien, et je vous en fait profiter ici. Bien sûr, le calcul de cette distance existe déjà dans Google Maps, mais j'avais besoin d'un calcul indépendant.

Pour avoir les coordonnées sur Google Maps (Windows), il faut pointer à la souris sur le lieu recherché, faire clic-droit => un petit menu popup s'affiche => sélectionner l'item "Plus d'infos sur cet endroit" => lire les coordonnées sur la petite fenêtre qui s'affiche. On peut faire quelque chose d'équivalent avec un smartphone ou une tablette.

Pour l'exemple:
Lieu A => la mairie de Tours (47.390668 Nord et 0.689319 Est)
Lieu B => la mairie de Limoges (45.826516 Nord et 1.260290 Est)

J'ai ajouté quelques fonctions utilitaires de conversion des angles puisque:
- les coordonnées GPS qu'on a, peuvent être exprimées en "degrés décimaux" ou en "degrés minutes secondes"
- la formule de calcul demande que les angles soit donnés en radians.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
"""
Source pour le calcul:
https://geodesie.ign.fr/contenu/fichiers/Distance_longitude_latitude.pdf
"""
 
from math import sin, cos, acos, pi
 
#############################################################################
def dms2dd(d, m, s):
    """Convertit un angle "degrés minutes secondes" en "degrés décimaux"
    """
    return d + m/60 + s/3600
 
#############################################################################
def dd2dms(dd):
    """Convertit un angle "degrés décimaux" en "degrés minutes secondes"
    """
    d = int(dd)
    x = (dd-d)*60
    m = int(x)
    s = (x-m)*60
    return d, m, s
 
#############################################################################
def deg2rad(dd):
    """Convertit un angle "degrés décimaux" en "radians"
    """
    return dd/180*pi
 
#############################################################################
def rad2deg(rd):
    """Convertit un angle "radians" en "degrés décimaux"
    """
    return rd/pi*180
 
#############################################################################
def distanceGPS(latA, longA, latB, longB):
    """Retourne la distance en mètres entre les 2 points A et B connus grâce à
       leurs coordonnées GPS (en radians).
    """
    # Rayon de la terre en mètres (sphère IAG-GRS80)
    RT = 6378137
    # angle en radians entre les 2 points
    S = acos(sin(latA)*sin(latB) + cos(latA)*cos(latB)*cos(abs(longB-longA)))
    # distance entre les 2 points, comptée sur un arc de grand cercle
    return S*RT
 
#############################################################################
if __name__ == "__main__":
 
    # cooordonnées GPS en radians du 1er point (ici, mairie de Tours)
    latA = deg2rad(47.390668) # Nord
    longA = deg2rad(0.689319) # Est
 
    # cooordonnées GPS en radians du 2ème point (ici, mairie de Limoges)
    latB = deg2rad(45.826516) # Nord
    longB = deg2rad(1.260290) # Est
 
    dist = distanceGPS(latA, longA, latB, longB)
    print(int(dist))
Ce qui affiche: 179510 mètres => 179,51 km

Sur le pdf de référence dont je donne le lien, on voit qu'il y a des possibilités d'avoir plus de précisions puisque la terre n'est pas une sphère parfaite.

Amusez-vous bien!