Le calcul de la distance géographique entre deux points situés à la surface de la Terre est l'une des opérations les plus courantes en géographie, en navigation, en aviation et dans les systèmes modernes de localisation. Chaque jour, des millions d'applications utilisent ce type de calcul pour déterminer des itinéraires, estimer des temps de déplacement ou localiser des positions avec précision. Qu'il s'agisse d'un système GPS, d'un logiciel de cartographie ou d'un programme de navigation maritime ou aérienne, tous reposent sur des principes mathématiques similaires permettant de mesurer la distance séparant deux coordonnées géographiques. Contrairement au calcul de la distance entre deux points sur un plan, la Terre possède une forme approximativement sphérique, ce qui oblige à tenir compte de sa courbure. Heureusement, il n'est pas nécessaire d'être un spécialiste en trigonométrie sphérique pour mettre en oeuvre ce type de calcul dans un programme informatique. À partir des coordonnées de latitude et de longitude de deux emplacements, il est possible de déterminer avec une excellente précision la distance qui les sépare, que celle-ci soit exprimée en kilomètres (Km), en miles terrestres ou en miles nautiques. Le principe consiste à convertir les coordonnées géographiques en angles mesurés en radians, puis à appliquer une formule trigonométrique permettant de calculer l'angle central entre les deux points à la surface du globe. Une fois cet angle obtenu, il suffit de le multiplier par le rayon approprié de la Terre afin d'obtenir la distance recherchée dans l'unité désirée.
Dans l'exemple présenté ci-dessous, les coordonnées de Montréal et de Paris sont utilisées afin de démontrer le fonctionnement de cette méthode. Le programme QuickBASIC/QBasic met en oeuvre plusieurs fonctions spécialisées permettant de calculer la distance entre deux positions géographiques dans différentes unités de mesure. Une fonction d'arc cosinus est tout d'abord utilisée afin de compléter les capacités trigonométriques du langage, puis plusieurs routines effectuent la conversion des coordonnées et le calcul de la distance sur la sphère terrestre. Cette approche offre l'avantage d'être relativement simple à comprendre tout en fournissant des résultats très précis. Les exemples fournis montrent la distance séparant Montréal et Paris en kilomètres, en miles terrestres ainsi qu'en miles nautiques, démontrant la flexibilité de l'algorithme. Ce type de calcul est particulièrement utile dans les logiciels de géolocalisation, les applications de transport, les systèmes d'information géographique, les programmes de navigation maritime et aérienne ainsi que dans de nombreux projets scientifiques. Il constitue également un excellent exemple de l'application concrète de la trigonométrie à un problème réel de géographie et de cartographie moderne.
Ainsi, si vous savez les coordonnées suivantes :
| Ville | Latitude | Longitude |
|---|---|---|
| Montréal | 45 31N | 73 34O |
| Paris | 48 50N | 2 20E |
A l'aide du code source QuickBASIC/QBasic suivant, vous trouvez la réponse que vous souhaitez :
- DECLARE FUNCTION ACos! (a!)
- DECLARE FUNCTION CoordToDeltaKm! (Q1Latitude!, Q1LatiDeg!, Q1LatiDirection$, Q1Longitude!, Q1LongDeg!, Q1LongDirection$, Q2Latitude!, Q2LatiDeg!, Q2LatiDirection$, Q2Longitude!, Q2LongDeg!, Q2LongDirection$)
- DECLARE FUNCTION CoordToDeltaNauticalMiles! (Q1Latitude!, Q1LatiDeg!, Q1LatiDirection$, Q1Longitude!, Q1LongDeg!, Q1LongDirection$, Q2Latitude!, Q2LatiDeg!, Q2LatiDirection$, Q2Longitude!, Q2LongDeg!, Q2LongDirection$)
- DECLARE FUNCTION CoordToDeltaStatuteMiles! (Q1Latitude!, Q1LatiDeg!, Q1LatiDirection$, Q1Longitude!, Q1LongDeg!, Q1LongDirection$, Q2Latitude!, Q2LatiDeg!, Q2LatiDirection$, Q2Longitude!, Q2LongDeg!, Q2LongDirection$)
-
- CONST PI = 3.141592653589793#
-
- PRINT "Distance entre Montréal et Paris en Km: " + STR$(CoordToDeltaKm!(45, 31, "N", 73, 34, "O", 48, 50, "N", 2, 20, "E"))
- PRINT "Distance entre Montréal et Paris en Miles: " + STR$(CoordToDeltaStatuteMiles(45, 31, "N", 73, 34, "O", 48, 50, "N", 2, 20, "E"))
- PRINT "Distance entre Montréal et Paris en Miles Nautique: " + STR$(CoordToDeltaNauticalMiles(45, 31, "N", 73, 34, "O", 48, 50, "N", 2, 20, "E"))
-
- FUNCTION ACos (a)
- IF ABS(a) = 1 THEN
- ACos = (1 - a) * PI / 2
- ELSE
- ACos = ATN(-a / SQR(1 - a * a)) + 2 * ATN(1)
- END IF
- END FUNCTION
-
- FUNCTION CoordToDeltaKm! (Q1Latitude, Q1LatiDeg, Q1LatiDirection$, Q1Longitude, Q1LongDeg, Q1LongDirection$, Q2Latitude, Q2LatiDeg, Q2LatiDirection$, Q2Longitude, Q2LongDeg, Q2LongDirection$)
- a1 = (Q1Latitude + (Q1LatiDeg / 60)) * PI / 180
- IF Q1LatiDirection$ = "N" THEN
- a1 = -a1
- END IF
- b1 = (Q1Longitude + (Q1LongDeg / 60)) * PI / 180
- IF Q1LongDirection$ = "O" THEN
- b1 = -b1
- END IF
- a2 = (Q2Latitude + (Q2LatiDeg / 60)) * PI / 180
- IF Q2LatiDirection$ = "N" THEN
- a2 = -a2
- END IF
- b2 = (Q2Longitude + (Q2LongDeg / 60)) * PI / 180
- IF Q2LongDirection$ = "O" THEN
- b2 = -b2
- END IF
- RawDelta = ACos(COS(a1) * COS(b1) * COS(a2) * COS(b2) + COS(a1) * SIN(b1) * COS(a2) * SIN(b2) + SIN(a1) * SIN(a2))
- CoordToDeltaKm = RawDelta * 6378!
- END FUNCTION
-
- FUNCTION CoordToDeltaNauticalMiles (Q1Latitude, Q1LatiDeg, Q1LatiDirection$, Q1Longitude, Q1LongDeg, Q1LongDirection$, Q2Latitude, Q2LatiDeg, Q2LatiDirection$, Q2Longitude, Q2LongDeg, Q2LongDirection$)
- a1 = (Q1Latitude + (Q1LatiDeg / 60)) * PI / 180
- IF Q1LatiDirection$ = "N" THEN
- a1 = -a1
- END IF
- b1 = (Q1Longitude + (Q1LongDeg / 60)) * PI / 180
- IF Q1LongDirection$ = "O" THEN
- b1 = -b1
- END IF
- a2 = (Q2Latitude + (Q2LatiDeg / 60)) * PI / 180
- IF Q2LatiDirection$ = "N" THEN
- a2 = -a2
- END IF
- b2 = (Q2Longitude + (Q2LongDeg / 60)) * PI / 180
- IF Q2LongDirection$ = "O" THEN
- b2 = -b2
- END IF
- RawDelta = ACos(COS(a1) * COS(b1) * COS(a2) * COS(b2) + COS(a1) * SIN(b1) * COS(a2) * SIN(b2) + SIN(a1) * SIN(a2))
- CoordToDeltaNauticalMiles = RawDelta * 3443.9
- END FUNCTION
-
- FUNCTION CoordToDeltaStatuteMiles (Q1Latitude, Q1LatiDeg, Q1LatiDirection$, Q1Longitude, Q1LongDeg, Q1LongDirection$, Q2Latitude, Q2LatiDeg, Q2LatiDirection$, Q2Longitude, Q2LongDeg, Q2LongDirection$)
- a1 = (Q1Latitude + (Q1LatiDeg / 60)) * PI / 180
- IF Q1LatiDirection$ = "N" THEN
- a1 = -a1
- END IF
- b1 = (Q1Longitude + (Q1LongDeg / 60)) * PI / 180
- IF Q1LongDirection$ = "O" THEN
- b1 = -b1
- END IF
- a2 = (Q2Latitude + (Q2LatiDeg / 60)) * PI / 180
- IF Q2LatiDirection$ = "N" THEN
- a2 = -a2
- END IF
- b2 = (Q2Longitude + (Q2LongDeg / 60)) * PI / 180
- IF Q2LongDirection$ = "O" THEN
- b2 = -b2
- END IF
- RawDelta = ACos(COS(a1) * COS(b1) * COS(a2) * COS(b2) + COS(a1) * SIN(b1) * COS(a2) * SIN(b2) + SIN(a1) * SIN(a2))
- CoordToDeltaStatuteMiles = RawDelta * 3963.1
- END FUNCTION
on obtiendra le résultat suivant :
Distance entre Montréal et Paris en Km: 5510.16761889Distance entre Montréal et Paris en Miles: 3423.85470217
Distance entre Montréal et Paris en Miles Nautique: 2975.30044884