Sciences informatiques et numériques : SNT/NSI

Calcul d’une distance entre deux points du Globe (Enseignement scientifique Première)

 

Calcul d’une distance entre deux points du Globe à 50 m près (niveau : débutant)

 

Le but de cet article est de proposer un code capable d’effectuer des calculs plus précis que les SIG (système d’information géographique) habituels comme par exemple Google Earth.

Les formules proposées sont issues du livre de Jean Meeus (astronome belge spécialisé en mécanique céleste et en astronomie mathématique et sphérique).

L'auteur annonce une précision de l'ordre de la cinquantaine de mètres.

Il y a cinq parties :

1.Présentation de l’ouvrage

2. Extraits de l’ouvrage 

3. Implémentation en langage python

4. Exemple : distance entre le fort Delgrès et la tour Eiffel

5. Ouvertures

 

1.Présentation de l’ouvrage

Ce livre est une référence dans les mathématiques associées à l’astronomie. Il m’a été recommandé, il y a quelques années par un responsable de l’IMCCE. La table des matière (ci-dessous) donne une idée de sa richesse.

sommaire

2. Extraits de l’ouvrage 

La précision des calculs vient du fait que les formules tiennent compte de l’aplatissement de la Terre.

 

 

Par la suite, on aura (valeurs adoptées par l’Union Astronomique Internationale en 1976) :

  • rayon équatorial terrestre a = 6378,14 km

 

  • aplatissement f = 1 / 298,257

extrait

 

3. Implémentation en langage python



from math import sqrt, sin, cos, tan, acos, atan, pi



def saisie(angle,exemple):

    h,min,s, pointCard = input("Saisir la "

    + angle + "\nExemple : \nsaisir"

    + exemple).split()

    print(angle + " : " + h + "° " + min

    + "' " + s + "\" "+pointCard)

    if pointCard == 'O' or pointCard == 'S':

        signe = -1

    else:

        signe = 1

    # conversion en radian de l'angle saisi

    valeur = (signe * (float(h) + float(min) / 60

    + float(s) / 3600)) * pi / 180

    return valeur

#PROGRAMME PRINCIPAL

# Distance entre deux points de la Terre

a = 6378.14 # rayon équatorial

f = 1 / 298.257 # applatissement de la Terre

exempleLat = " 48 50 11 N \npour 48°50'11\"N\n"

exempleLong = " 2 20 14 E \npour 2°20'14\"E\n"

lat1 = saisie("latitude du lieu 1",exempleLat)

long1 = saisie("longitude du lieu 1",exempleLong)

lat2 = saisie("latitude du lieu 2",exempleLat)

long2 = saisie("longitude du lieu 2",exempleLong)

# Variables intermédiares

F = (lat1 + lat2) * 0.5

G = (lat1 - lat2)  *0.5

Lambda = (long1 - long2) * 0.5

S = (sin(G) * cos(Lambda)) ** 2 + (cos(F) * sin(Lambda)) ** 2

C = (cos(G) * cos(Lambda)) ** 2 + (sin(F) * sin(Lambda)) ** 2

w = atan(sqrt(S / C))

R = sqrt(S * C) / w

D = 2 * w * a

H1 = (3 * R - 1)/(2 * C)

H2 = (3 * R + 1)/(2 * S)

# Formule

s = D * (1 + f * H1 * (sin(F) * cos(G)) ** 2 - f * H2 * (cos(F) * sin(G)) ** 2)

# Formule rapide

d = acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos((long1 - long2)))

s_approchee = 6371 * d

# Affichage

print(">> s = ",round(s,2),"km","|| s_approchee = ",round(s_approchee,2),"km <<")

print("Ecart",round(abs(s-s_approchee),2),"km")

4. Exemple : distance entre le fort Delgrès et la tour Eiffel

Si on considère le fort Delgrès à Basse Terre et la tour Eiffel à Paris, on obtient :

Données pour le fort Delgrès :

Latitude : 15° 59’ 19’’ N

Longitude : 61° 43’ 23’’ O

 

 Données pour la tour Eiffel :

Latitude : 48° 51’ 30’’ N

Longitude : 2° 17’ 40’’ E

 

>> s =  6789.83 km 

>> s_approchee =  6785.01 km 

>> écart 4.82 km

 

 

5. Ouvertures

  • Comparer les résultats avec ceux des exercices d’enseignement scientifique de première

 

  • Comparer les résultats avec Google Earth

 

 

  • Pour la spécialité NSI, implémenter le code à partir de l’article et améliorer l’interface de saisie