Et, oui, c'est toute la subtilité de cette formule.
Les cosinus doivent calculer en dégrés car c'est dans cette unité que l'on exprime traditionellement les coordonnées géographiques.
Par contre, le produit du rayon de la terre (ici arrondi à 6378 km) par l'arc cosinus doit être effectué en radian, car il s'agit ici de calculer le résultat d'une intégration.
D'où ma proposition :
Code : Tout sélectionner
« -> a1 o1 a2 o2
'6378*D->R(ACOS(COS(a2)*COS(a1)*COS(o2-o1)+SIN(a2)*SIN(a1)))' »
à utiliser bien évidemment en mode DEG.
L'implémentation homologue (à utiliser en mode RADIAN) est plus longue, car il faut convertir les degrés en radian dans chaque COS et SIN.
Mais, le soucis n'est pas là.
Il y a, pour les coordonnées géographiques de type GPS, trois façon de représenter la latitude et la longitute:
- en degrés décimaux ddd.dddddd° ( par exemple Mont Blanc N 45.83289° E 6.86507° )
- en degrés et minutes décimales, ddd°mm.mmm' (par exemple Mont Blanc N45° 49.973' E 006° 51.904' )
- en degrés, minutes et secondes, ddd°mm'ss.ssss" (par exemple Mont Blanc N 45° 49' 58.4" E6° 51' 54.3" )
La fonction ci-dessus ne fonctionne que en saisissant les coordonnées géographiques en degré décimaux !
Cette formule considère que la Terre est parfaitement sphèrique. La distance ainsi calculée sera donc d'autant plus fausse que l'on est proche des pôles.
Autre source d'erreur provient du fait que les coodonnées GPS sont celles du système géodésique WGS 84 qui modèlise la Terre en prenant un élypsoïde de réfèrence légèrement applatit et donc un rayon qui évolue en fonction de la lattitude.
Mais, en France, comme nous sommes au alentours du 45° parallèle, cette formule peut donner de bons résultats si l'on ne cherche pas une précision de moins d'un kilomètre.
Voici un programe pour SHARP PC-1211 qui accepte les coodonnées sous les trois formats. Si l'on dispose des coodonnée en degrés déciaux (ddd.ddddd°), on saisi uniquement les valeurs DEG (on tapant directement ENTER lorsque le PC-1211 demande MIN et SEC). Si l'on dispose des coordonnées en degré-minute ou ne renseigne que les champ de saisie DEG et MIN (ou tape ENTER sans rien entrer lorsuqe le pocket demande les SEC).
Code : Tout sélectionner
10 CLEAR :DEGREE :M=60,N=MM
15 PAUSE "POINT A:"
20 INPUT "A:LAT -1=S +1=N ";R
25 IF ABS U<>1 THEN 20
30 INPUT "A:LAT DEG "; A ,"A:lat MIN "; B ,"A:LAT SEC "; C
35 INPUT "A: -1=W +1=E ";S
40 IF ABS S<>1 THEN 35
45 INPUT "A:LONG DEG "; D ,"A:LONG MIN "; E ,"A:LONG SEC "; F
50 PAUSE "POINT B:"
55 INPUT "B:LAT -1=S +1=N ";T
60 IF ABS T<>1 THEN 55
65 INPUT "B:LAT DEG "; G ,"B:LAT MIN "; H ,"B:LAT SEC "; I
70 INPUT "B:LONG -1=W +1=E ";U
75 IF ABS U<>1 THEN 70
80 INPUT "B:LONG DEG "; J ,"B:LONG MIN "; K ,"A:LONG SEC "; L
85 A=(MA+NB+C)/MR, D=(MD+NE+F)/MS, G=(MG+NH+I)/MT, J=(MJ+NK+L)/MU
90 P=COS A*COS G*COS (D-J)+SIN A*SIN G:RADIAN :PRINT 6371*ACS P,"KM"
95 GOTO 15