Section courante

A propos

Section administrative du site

L'une des opérations les plus courantes dans les domaines de la géographie, de la cartographie, de la navigation et des systèmes d'information modernes consiste à calculer la distance séparant deux points situés à la surface de la Terre. Aujourd'hui, cette fonctionnalité est omniprésente dans les systèmes GPS, les applications de cartographie, les logiciels de navigation maritime et aérienne, ainsi que dans de nombreux outils de géolocalisation utilisés quotidiennement. Bien que le problème puisse sembler complexe à première vue, il n'est pas nécessaire de posséder des connaissances approfondies en trigonométrie ou en géodésie pour réaliser ce type de calcul. À partir des coordonnées géographiques exprimées sous forme de latitude et de longitude, il est possible de déterminer avec une excellente précision la distance qui sépare deux villes, deux monuments ou deux positions quelconques sur le globe terrestre. Selon les besoins, le résultat peut être exprimé en kilomètres, en miles terrestres ou encore en miles nautiques, unités couramment utilisées dans différents secteurs d'activité.

Le principe repose sur le fait que la Terre peut être approximée par une sphère et que la distance la plus courte entre deux points situés à sa surface correspond à un arc de grand cercle. Pour effectuer ce calcul, il faut d'abord convertir les coordonnées géographiques exprimées en degrés et minutes vers des valeurs angulaires en radians. Les fonctions trigonométriques permettent ensuite de déterminer l'angle séparant les deux positions sur la sphère terrestre. Une fois cet angle obtenu, il suffit de le multiplier par le rayon moyen de la Terre pour obtenir la distance correspondante. Cette méthode, utilisée depuis longtemps en navigation et en géographie, fournit des résultats remarquablement précis pour la majorité des applications courantes.

Le programme en langage C présenté ci-dessous illustre cette technique à travers trois fonctions distinctes. La première retourne la distance en kilomètres, la seconde en miles terrestres et la troisième en miles nautiques. Chacune applique la même formule trigonométrique, mais utilise un facteur de conversion différent afin d'obtenir le résultat dans l'unité désirée. L'exemple proposé compare les coordonnées géographiques de deux grandes villes bien connues : Montréal et Paris. À partir de leurs latitudes et longitudes respectives, le programme calcule automatiquement la distance séparant ces deux métropoles et affiche le résultat sous plusieurs formes. Cet exemple démontre comment quelques fonctions mathématiques de la bibliothèque standard du langage C permettent de résoudre un problème géographique concret avec une grande précision. Il constitue également une excellente introduction aux calculs géodésiques et aux techniques utilisées dans les systèmes modernes de navigation, de cartographie numérique et de géolocalisation.

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 C suivant, vous trouvez la réponse que vous souhaitez :

Essayer maintenant !
  1. #include <math.h>
  2. #include <stdio.h>
  3.  
  4. #define M_PI 3.14159265358979224
  5.  
  6. double CoordToDeltaKm(
  7.  double Q1Latitude,double Q1LatiDeg, char Q1LatiDirection,
  8.  double Q1Longitude,double Q1LongDeg, char Q1LongDirection,
  9.  double Q2Latitude,double Q2LatiDeg, char Q2LatiDirection,
  10.  double Q2Longitude,double Q2LongDeg, char Q2LongDirection
  11. ) {
  12.  double a1,b1,a2,b2,RawDelta;
  13.  a1=(Q1Latitude+(Q1LatiDeg/60))*M_PI/180;
  14.  if(Q1LatiDirection=='N') a1=-a1;
  15.  b1=(Q1Longitude+(Q1LongDeg/60))*M_PI/180;
  16.  if(Q1LongDirection=='O') b1=-b1;
  17.  a2=(Q2Latitude+(Q2LatiDeg/60))*M_PI/180;
  18.  if(Q2LatiDirection=='N') a2=-a2;
  19.  b2=(Q2Longitude+(Q2LongDeg/60))*M_PI/180;
  20.  if(Q2LongDirection=='O') b2=-b2;
  21.  RawDelta = acos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2));
  22.  return RawDelta * 6378.0;
  23. }
  24.  
  25. double CoordToDeltaStatuteMiles(
  26.  double Q1Latitude,double Q1LatiDeg, char Q1LatiDirection,
  27.  double Q1Longitude,double Q1LongDeg, char Q1LongDirection,
  28.  double Q2Latitude,double Q2LatiDeg, char Q2LatiDirection,
  29.  double Q2Longitude,double Q2LongDeg, char Q2LongDirection
  30. ) {
  31.  double a1,b1,a2,b2,RawDelta;
  32.  a1=(Q1Latitude+(Q1LatiDeg/60))*M_PI/180;
  33.  if(Q1LatiDirection=='N') a1=-a1;
  34.  b1=(Q1Longitude+(Q1LongDeg/60))*M_PI/180;
  35.  if(Q1LongDirection=='O') b1=-b1;
  36.  a2=(Q2Latitude+(Q2LatiDeg/60))*M_PI/180;
  37.  if(Q2LatiDirection=='N') a2=-a2;
  38.  b2=(Q2Longitude+(Q2LongDeg/60))*M_PI/180;
  39.  if(Q2LongDirection=='O') b2=-b2;
  40.  RawDelta = acos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2));
  41.  return RawDelta * 3963.1;
  42. }
  43.  
  44. double  CoordToDeltaNauticalMiles(
  45.  double Q1Latitude,double Q1LatiDeg, char Q1LatiDirection,
  46.  double Q1Longitude,double Q1LongDeg, char Q1LongDirection,
  47.  double Q2Latitude,double Q2LatiDeg, char Q2LatiDirection,
  48.  double Q2Longitude,double Q2LongDeg, char Q2LongDirection
  49. ) {
  50.  double a1,b1,a2,b2,RawDelta;
  51.  a1=(Q1Latitude+(Q1LatiDeg/60))*M_PI/180;
  52.  if(Q1LatiDirection=='N') a1=-a1;
  53.  b1=(Q1Longitude+(Q1LongDeg/60))*M_PI/180;
  54.  if(Q1LongDirection=='O') b1=-b1;
  55.  a2=(Q2Latitude+(Q2LatiDeg/60))*M_PI/180;
  56.  if(Q2LatiDirection=='N') a2=-a2;
  57.  b2=(Q2Longitude+(Q2LongDeg/60))*M_PI/180;
  58.  if(Q2LongDirection=='O') b2=-b2;
  59.  RawDelta = acos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2));
  60.  return RawDelta * 3443.9;
  61. }
  62.  
  63. void main() {
  64.  printf("Distance entre Montréal et Paris en Km: %f\n",CoordToDeltaKm(45, 31,'N', 73, 34,'O',    48, 50,'N', 2,  20,'E'));
  65.  printf("Distance entre Montréal et Paris en Miles: %f\n ",CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O',    48, 50,'N', 2,  20,'E'));
  66.  printf("Distance entre Montréal et Paris en Miles Nautique: %f\n ",CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O',    48, 50,'N', 2,  20,'E'));
  67. }
  68.  

on obtiendra le résultat suivant :

Distance entre Montréal et Paris en Km: 5510.16761889
Distance entre Montréal et Paris en Miles: 3423.85470217
Distance entre Montréal et Paris en Miles Nautique: 2975.30044884


Dernière mise à jour : Samedi, le 22 août 2015