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)) |
Partager