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 pour le QuickPascal, vous trouvez la réponse que vous souhaitez:
Program CoordToDelta;
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'));
WriteLn('Distance entre Montréal et Paris en Miles: ',
CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'));
WriteLn('Distance entre Montréal et Paris en Miles Nautique: ',
CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'));
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 : Dimanche, le 4 mai 2014