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

  1. SAY "Distance entre Montréal et Paris en Km: " 
  2. SAY CoordToDeltaKm(45, 31,'N',73, 34,'O',48, 50,'N', 2,  20,'E') 
  3. SAY "Distance entre Montréal et Paris en Miles: " 
  4. SAY CoordToDeltaStatuteMiles(45, 31,'N',73, 34,'O',48, 50,'N', 2,  20,'E') 
  5. SAY "Distance entre Montréal et Paris en Miles Nautique: " 
  6. SAY CoordToDeltaNauticalMiles(45, 31,'N',73, 34,'O',48, 50,'N', 2,  20,'E') 
  7. Exit 
  8.  
  9. Cos :Procedure  
  10.  Numeric Digits 12 
  11.  Arg X 
  12.  X=X//6.28318530718 
  13.  If X>+3.14159265359 Then X=X-6.28318530718 Else  
  14.  If X<-3.14159265359 Then X=X+6.28318530718 
  15.  F=1 
  16.  Y=1 
  17.  YY=1 
  18.  X=X*X 
  19.  Do N=2 By 2 
  20.   F=-F*X/(N*(N-1)) 
  21.   Y=Y+F 
  22.   If YY=Y Then Leave 
  23.   YY=Y 
  24.  End 
  25.  If Abs(Y) < 1E-8 Then Y=0 
  26.  Return Y 
  27.  
  28. Sin :Procedure  
  29.  Numeric Digits 12 
  30.  Arg X 
  31.  X=X//6.28318530718 
  32.  If X>+3.14159265359 Then X=X-6.28318530718 Else  
  33.  If X<-3.14159265359 Then X=X+6.28318530718 
  34.  F=X 
  35.  Y=X 
  36.  YY=X 
  37.  X=X*X 
  38.  Do N=2 By 2 
  39.   F=-F*X/(N*(N+1)) 
  40.   Y=Y+F 
  41.   If YY=Y Then Leave 
  42.   YY=Y 
  43.  End 
  44.  If Abs(Y) < 1E-8 Then Y=0 
  45.  Return Y 
  46.  
  47. Sqrt :Procedure  
  48.  Numeric Digits 12 
  49.  Parse Arg N 
  50.  If N<=0 Then Return 0 
  51.  Parse Value Format(N,,,,0) With N'E'Ep 
  52.  If Ep='' Then Ep = 0  
  53.   Else  
  54.  If Abs(Ep//2) Then Do 
  55.   N=N*10 
  56.   Ep=Ep-1  
  57.  End 
  58.  Do X=2 While X*X<N  
  59.  End 
  60.  Do Forever 
  61.   X1=(N/X+X)/2  
  62.   If X=X1 Then Leave  
  63.   X=X1 
  64.  End 
  65.  Return X'e'Ep/2 
  66.  
  67. ArcTan :Procedure  
  68.  Numeric Digits 12 
  69.  Arg X 
  70.  X=X/Sqrt(X*X+1) 
  71.  If Abs(X)>1 Then Return 0 
  72.  If Abs(X)>=0.75 Then Do 
  73.   Flip=Sign(X)*1.5707963267948966192 
  74.   X=Sqrt(1-X*X) 
  75.  End 
  76.   Else  
  77.  Flip=0 
  78.  F=X 
  79.  Y=X 
  80.  YY=X 
  81.  X=X*X 
  82.  Do N=2 By 2 
  83.   F=F*X*(N-1)/N 
  84.   Y=Y+F/(N+1) 
  85.   If YY=Y Then Leave 
  86.   YY=Y 
  87.  End 
  88.  If Flip<>0 Then Y=Flip-Y 
  89.  Return Y 
  90.  
  91.  
  92. ArcCos :Procedure  
  93.  Arg a 
  94.  pi=3.14159265359 
  95.  If Abs(a)=1.0 Then Return (1-a)*pi/2.0 
  96.                Else Return ArcTan(-a/Sqrt(1-a*a))+2*ArcTan(1) 
  97.  
  98.  
  99. CoordToDeltaKm: Procedure 
  100.  Arg Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection 
  101.  pi=3.14159265359 
  102.  a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180  
  103.  If Q1LatiDirection='N' Then a1=-a1 
  104.  b1=(Q1Longitude+(Q1LongDeg/60))*pi/180 
  105.  If Q1LongDirection='O' Then b1=-b1 
  106.  a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180 
  107.  If Q2LatiDirection='N' Then a2=-a2 
  108.  b2=(Q2Longitude+(Q2LongDeg/60))*pi/180 
  109.  If Q2LongDirection='O' Then b2=-b2 
  110.  RawDelta=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2)) 
  111.  Return RawDelta * 6378.0 
  112.  
  113. CoordToDeltaStatuteMiles: Procedure 
  114.  Arg Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection 
  115.  pi=3.14159265359 
  116.  a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180  
  117.  If Q1LatiDirection='N' Then a1=-a1 
  118.  b1=(Q1Longitude+(Q1LongDeg/60))*pi/180 
  119.  If Q1LongDirection='O' Then b1=-b1 
  120.  a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180 
  121.  If Q2LatiDirection='N' Then a2=-a2 
  122.  b2=(Q2Longitude+(Q2LongDeg/60))*pi/180 
  123.  If Q2LongDirection='O' Then b2=-b2 
  124.  RawDelta=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2)) 
  125.  Return RawDelta * 3963.1 
  126.  
  127.  CoordToDeltaNauticalMiles: Procedure 
  128.  Arg Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection 
  129.  pi=3.14159265359 
  130.  a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180  
  131.  If Q1LatiDirection='N' Then a1=-a1 
  132.  b1=(Q1Longitude+(Q1LongDeg/60))*pi/180 
  133.  If Q1LongDirection='O' Then b1=-b1 
  134.  a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180 
  135.  If Q2LatiDirection='N' Then a2=-a2 
  136.  b2=(Q2Longitude+(Q2LongDeg/60))*pi/180 
  137.  If Q2LongDirection='O' Then b2=-b2 
  138.  RawDelta=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2)) 
  139.  Return RawDelta * 3443.9

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 : Lundi, le 10 novembre 2014