Section courante

A propos

Section administrative du site

Une des fonctions les plus communes de la géographie et des systèmes modernes, c'est le calcul de la distance géographique entre deux coordonnées de Longitude et de Latitude. Il n'y a aucune nécessité de grande connaissance en trigonométrie pour arriver à se genre de calcul dans le format qu'on le souhaite, Km, Miles ou Miles Nautiques. 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 Modula-2 suivant, vous trouvez la réponse que vous souhaitez :

  1. MODULE CoordToDelta; 
  2.  
  3. FROM InOut IMPORT WriteString, WriteLn; 
  4. FROM SRealIO IMPORT WriteReal; 
  5. FROM RealMath IMPORT arccos,cos,sin; 
  6.  
  7. CONST PI=3.14159265358979224; 
  8.  
  9. PROCEDURE CoordToDeltaKm( 
  10.  Q1Latitude,Q1LatiDeg:REAL;Q1LatiDirection:CHAR; 
  11.  Q1Longitude,Q1LongDeg:REAL;Q1LongDirection:CHAR; 
  12.  Q2Latitude,Q2LatiDeg:REAL;Q2LatiDirection:CHAR; 
  13.  Q2Longitude,Q2LongDeg:REAL;Q2LongDirection:CHAR 
  14. ):REAL; 
  15. VAR 
  16.  a1,b1,a2,b2,RawDelta:REAL; 
  17. BEGIN 
  18.  a1:=(Q1Latitude+(Q1LatiDeg/60.0))*PI/180.0; 
  19.  IF Q1LatiDirection='N'THEN 
  20.     a1:=-a1; 
  21.  END; 
  22.  b1:=(Q1Longitude+(Q1LongDeg/60.0))*PI/180.0; 
  23.  IF Q1LongDirection='O'THEN 
  24.     b1:=-b1; 
  25.  END; 
  26.  a2:=(Q2Latitude+(Q2LatiDeg/60.0))*PI/180.0; 
  27.  IF Q2LatiDirection='N'THEN 
  28.     a2:=-a2; 
  29.  END; 
  30.  b2:=(Q2Longitude+(Q2LongDeg/60.0))*PI/180.0; 
  31.  IF Q2LongDirection='O'THEN 
  32.     b2:=-b2; 
  33.  END; 
  34.  RawDelta:=arccos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2)); 
  35.  RETURN RawDelta*6378.0; 
  36. END CoordToDeltaKm; 
  37.  
  38. PROCEDURE CoordToDeltaStatuteMiles( 
  39.  Q1Latitude,Q1LatiDeg:REAL;Q1LatiDirection:CHAR; 
  40.  Q1Longitude,Q1LongDeg:REAL;Q1LongDirection:CHAR; 
  41.  Q2Latitude,Q2LatiDeg:REAL;Q2LatiDirection:CHAR; 
  42.  Q2Longitude,Q2LongDeg:REAL;Q2LongDirection:CHAR 
  43. ):REAL; 
  44. VAR 
  45.  a1,b1,a2,b2,RawDelta:REAL; 
  46. BEGIN 
  47.  a1:=(Q1Latitude+(Q1LatiDeg/60.0))*PI/180.0; 
  48.  IF Q1LatiDirection='N'THEN 
  49.     a1:=-a1; 
  50.  END; 
  51.  b1:=(Q1Longitude+(Q1LongDeg/60.0))*PI/180.0; 
  52.  IF Q1LongDirection='O'THEN 
  53.     b1:=-b1; 
  54.  END; 
  55.  a2:=(Q2Latitude+(Q2LatiDeg/60.0))*PI/180.0; 
  56.  IF Q2LatiDirection='N'THEN 
  57.     a2:=-a2; 
  58.  END; 
  59.  b2:=(Q2Longitude+(Q2LongDeg/60.0))*PI/180.0; 
  60.  IF Q2LongDirection='O'THEN 
  61.     b2:=-b2; 
  62.  END; 
  63.  RawDelta:=arccos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2)); 
  64.  RETURN RawDelta*3963.1; 
  65. END CoordToDeltaStatuteMiles; 
  66.  
  67. PROCEDURE CoordToDeltaNauticalMiles( 
  68.  Q1Latitude,Q1LatiDeg:REAL;Q1LatiDirection:CHAR; 
  69.  Q1Longitude,Q1LongDeg:REAL;Q1LongDirection:CHAR; 
  70.  Q2Latitude,Q2LatiDeg:REAL;Q2LatiDirection:CHAR; 
  71.  Q2Longitude,Q2LongDeg:REAL;Q2LongDirection:CHAR 
  72. ):REAL; 
  73. VAR 
  74.  a1,b1,a2,b2,RawDelta:REAL; 
  75. BEGIN 
  76.  a1:=(Q1Latitude+(Q1LatiDeg/60.0))*PI/180.0; 
  77.  IF Q1LatiDirection='N'THEN 
  78.     a1:=-a1; 
  79.  END; 
  80.  b1:=(Q1Longitude+(Q1LongDeg/60.0))*PI/180.0; 
  81.  IF Q1LongDirection='O'THEN 
  82.     b1:=-b1; 
  83.  END; 
  84.  a2:=(Q2Latitude+(Q2LatiDeg/60.0))*PI/180.0; 
  85.  IF Q2LatiDirection='N'THEN 
  86.     a2:=-a2; 
  87.  END; 
  88.  b2:=(Q2Longitude+(Q2LongDeg/60.0))*PI/180.0; 
  89.  IF Q2LongDirection='O'THEN 
  90.     b2:=-b2; 
  91.  END; 
  92.  RawDelta:=arccos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2)); 
  93.  RETURN RawDelta * 3443.9; 
  94. END CoordToDeltaNauticalMiles; 
  95.  
  96. BEGIN 
  97.  WriteString('Distance entre Montréal et Paris en Km: '); 
  98.  WriteReal(CoordToDeltaKm(45.0, 31.0,'N',73.0, 34.0,'O',48.0, 50.0,'N', 2.0,  20.0,'E'),10); 
  99.  WriteLn; 
  100.  WriteString('Distance entre Montréal et Paris en Miles: '); 
  101.  WriteReal(CoordToDeltaStatuteMiles(45.0, 31.0,'N', 73.0, 34.0,'O',    48.0, 50.0,'N', 2.0,  20.0,'E'),10); 
  102.  WriteLn; 
  103.  WriteString('Distance entre Montréal et Paris en Miles Nautique: '); 
  104.  WriteReal(CoordToDeltaNauticalMiles(45.0, 31.0,'N', 73.0, 34.0,'O',    48.0, 50.0,'N', 2.0,  20.0,'E'),10); 
  105.  WriteLn; 
  106. END CoordToDelta.

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 : Dimanche, le 11 janvier 2015