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 Pascal suivant, vous trouvez la réponse que vous souhaitez:
- Program CoordToDelta;
-
- Function Sqrt(X:Real):Real;
- Var
- A,B,M,XN:Real;
- Begin
- If X=0.0Then Begin
- Sqrt:=0.0;
- End
- Else
- Begin
- M:=1.0;
- XN:=X;
- While XN>=2.0 do Begin
- XN:=0.25*XN;
- M:=2.0*M;
- End;
- While XN<0.5 do Begin
- XN:=4.0*XN;
- M:=0.5*M;
- End;
- A:=XN;
- B:=1.0-XN;
- Repeat
- A:=A*(1.0+0.5*B);
- B:=0.25*(3.0+B)*B*B;
- Until B<1.0E-15;
- Sqrt:=A*M;
- End;
- End;
-
- Function Arctan(X:Real):Real;
- Var
- A,B:Real;
- N:Integer;
- Begin
- A := 1.0 / Sqrt(1.0 + (X * X));
- B := 1.0;
- For N:=1 to 11 do Begin
- A := (A + B) / 2.0;
- B := Sqrt(A * B);
- End;
- Arctan:=X/(Sqrt(1.0+(X*X))*A);
- End;
-
- Function Cos(X:Real):Real;
- Var
- R,S:Real;
- I:Byte;
- Begin
- R:=X*X;
- S:=42.0;
- For I:=10 downto 1 do S:=4.0*I-2.0+(-R)/S;
- S:=S*S;
- Cos:=(S-R)/(S+R);
- End;
-
- Function Sin(X:Real):Real;
- Var
- R,S:Real;
- I:Byte;
- Begin
- R:=X*X;
- S:=42.0;
- For I:=10 downto 1 do S:=4.0*I-2.0+(-R)/S;
- Sin:=2.0*X*S/(R+S*S);
- End;
-
- Function ArcCos(a:Real):Real;Begin
- If Abs(a)=1.0Then ArcCos:=(1-a)*PI/2.0
- Else ArcCos:=Arctan(-a/Sqrt(1-a*a))+2*Arctan(1);
- End;
-
- Function CoordToDeltaKm(
- Q1Latitude,Q1LatiDeg:Real;Q1LatiDirection:Char;
- Q1Longitude,Q1LongDeg:Real;Q1LongDirection:Char;
- Q2Latitude,Q2LatiDeg:Real;Q2LatiDirection:Char;
- Q2Longitude,Q2LongDeg:Real;Q2LongDirection:Char
- ):Real;
- Var
- a1,b1,a2,b2,RawDelta:Real;
- Begin
- 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));
- CoordToDeltaKm:=RawDelta*6378.0;
- End;
-
- Function CoordToDeltaStatuteMiles(
- Q1Latitude,Q1LatiDeg:Real;Q1LatiDirection:Char;
- Q1Longitude,Q1LongDeg:Real;Q1LongDirection:Char;
- Q2Latitude,Q2LatiDeg:Real;Q2LatiDirection:Char;
- Q2Longitude,Q2LongDeg:Real;Q2LongDirection:Char
- ):Real;
- Var
- a1,b1,a2,b2,RawDelta:Real;
- Begin
- 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));
- CoordToDeltaStatuteMiles:=RawDelta*3963.1;
- End;
-
-
- Function CoordToDeltaNauticalMiles(
- Q1Latitude,Q1LatiDeg:Real;Q1LatiDirection:Char;
- Q1Longitude,Q1LongDeg:Real;Q1LongDirection:Char;
- Q2Latitude,Q2LatiDeg:Real;Q2LatiDirection:Char;
- Q2Longitude,Q2LongDeg:Real;Q2LongDirection:Char
- ):Real;
- Var
- a1,b1,a2,b2,RawDelta:Real;
- Begin
- 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));
- CoordToDeltaNauticalMiles:=RawDelta * 3443.9;
- End;
-
- BEGIN
- WriteLn('Distance entre Montréal et Paris en Km: ',
- CoordToDeltaKm(45, 31,'N',73, 34,'O',48, 50,'N', 2, 20,'E'):4:8);
- WriteLn('Distance entre Montréal et Paris en Miles: ',
- CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'):4:8);
- WriteLn('Distance entre Montréal et Paris en Miles Nautique: ',
- CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'):4:8);
- END.
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 : Mardi, le 25 octobre 2016