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 :
- SAY "Distance entre Montréal et Paris en Km: "
- SAY CoordToDeltaKm(45, 31,'N',73, 34,'O',48, 50,'N', 2, 20,'E')
- SAY "Distance entre Montréal et Paris en Miles: "
- SAY CoordToDeltaStatuteMiles(45, 31,'N',73, 34,'O',48, 50,'N', 2, 20,'E')
- SAY "Distance entre Montréal et Paris en Miles Nautique: "
- SAY CoordToDeltaNauticalMiles(45, 31,'N',73, 34,'O',48, 50,'N', 2, 20,'E')
- Exit
-
- Cos :Procedure
- Numeric Digits 12
- Arg X
- X=X//6.28318530718
- If X>+3.14159265359 Then X=X-6.28318530718 Else
- If X<-3.14159265359 Then X=X+6.28318530718
- F=1
- Y=1
- YY=1
- X=X*X
- Do N=2 By 2
- F=-F*X/(N*(N-1))
- Y=Y+F
- If YY=Y Then Leave
- YY=Y
- End
- If Abs(Y) < 1E-8 Then Y=0
- Return Y
-
- Sin :Procedure
- Numeric Digits 12
- Arg X
- X=X//6.28318530718
- If X>+3.14159265359 Then X=X-6.28318530718 Else
- If X<-3.14159265359 Then X=X+6.28318530718
- F=X
- Y=X
- YY=X
- X=X*X
- Do N=2 By 2
- F=-F*X/(N*(N+1))
- Y=Y+F
- If YY=Y Then Leave
- YY=Y
- End
- If Abs(Y) < 1E-8 Then Y=0
- Return Y
-
- Sqrt :Procedure
- Numeric Digits 12
- Parse Arg N
- If N<=0 Then Return 0
- Parse Value Format(N,,,,0) With N'E'Ep
- If Ep='' Then Ep = 0
- Else
- If Abs(Ep//2) Then Do
- N=N*10
- Ep=Ep-1
- End
- Do X=2 While X*X<N
- End
- Do Forever
- X1=(N/X+X)/2
- If X=X1 Then Leave
- X=X1
- End
- Return X'e'Ep/2
-
- ArcTan :Procedure
- Numeric Digits 12
- Arg X
- X=X/Sqrt(X*X+1)
- If Abs(X)>1 Then Return 0
- If Abs(X)>=0.75 Then Do
- Flip=Sign(X)*1.5707963267948966192
- X=Sqrt(1-X*X)
- End
- Else
- Flip=0
- F=X
- Y=X
- YY=X
- X=X*X
- Do N=2 By 2
- F=F*X*(N-1)/N
- Y=Y+F/(N+1)
- If YY=Y Then Leave
- YY=Y
- End
- If Flip<>0 Then Y=Flip-Y
- Return Y
-
-
- ArcCos :Procedure
- Arg a
- pi=3.14159265359
- If Abs(a)=1.0 Then Return (1-a)*pi/2.0
- Else Return ArcTan(-a/Sqrt(1-a*a))+2*ArcTan(1)
-
-
- CoordToDeltaKm: Procedure
- Arg Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection
- pi=3.14159265359
- a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180
- If Q1LatiDirection='N' Then a1=-a1
- b1=(Q1Longitude+(Q1LongDeg/60))*pi/180
- If Q1LongDirection='O' Then b1=-b1
- a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180
- If Q2LatiDirection='N' Then a2=-a2
- b2=(Q2Longitude+(Q2LongDeg/60))*pi/180
- If Q2LongDirection='O' Then b2=-b2
- RawDelta=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2))
- Return RawDelta * 6378.0
-
- CoordToDeltaStatuteMiles: Procedure
- Arg Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection
- pi=3.14159265359
- a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180
- If Q1LatiDirection='N' Then a1=-a1
- b1=(Q1Longitude+(Q1LongDeg/60))*pi/180
- If Q1LongDirection='O' Then b1=-b1
- a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180
- If Q2LatiDirection='N' Then a2=-a2
- b2=(Q2Longitude+(Q2LongDeg/60))*pi/180
- If Q2LongDirection='O' Then b2=-b2
- RawDelta=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2))
- Return RawDelta * 3963.1
-
- CoordToDeltaNauticalMiles: Procedure
- Arg Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection
- pi=3.14159265359
- a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180
- If Q1LatiDirection='N' Then a1=-a1
- b1=(Q1Longitude+(Q1LongDeg/60))*pi/180
- If Q1LongDirection='O' Then b1=-b1
- a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180
- If Q2LatiDirection='N' Then a2=-a2
- b2=(Q2Longitude+(Q2LongDeg/60))*pi/180
- If Q2LongDirection='O' Then b2=-b2
- RawDelta=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2))
- Return RawDelta * 3443.9
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
Dernière mise à jour : Lundi, le 10 novembre 2014