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 RemObjects Chrome suivant, vous trouvez la réponse que vous souhaitez:
NameSpace coord2delta;
INTERFACE
Uses
System,System.Text;
type
Prog = class
class method CoordToDeltaKm(
Q1Latitude,Q1LatiDeg:Double;Q1LatiDirection:Char;
Q1Longitude,Q1LongDeg:Double;Q1LongDirection:Char;
Q2Latitude,Q2LatiDeg:Double;Q2LatiDirection:Char;
Q2Longitude,Q2LongDeg:Double;Q2LongDirection:Char
):Double;
class method CoordToDeltaStatuteMiles(
Q1Latitude,Q1LatiDeg:Double;Q1LatiDirection:Char;
Q1Longitude,Q1LongDeg:Double;Q1LongDirection:Char;
Q2Latitude,Q2LatiDeg:Double;Q2LatiDirection:Char;
Q2Longitude,Q2LongDeg:Double;Q2LongDirection:Char
):Double;
class method CoordToDeltaNauticalMiles(
Q1Latitude,Q1LatiDeg:Double;Q1LatiDirection:Char;
Q1Longitude,Q1LongDeg:Double;Q1LongDirection:Char;
Q2Latitude,Q2LatiDeg:Double;Q2LatiDirection:Char;
Q2Longitude,Q2LongDeg:Double;Q2LongDirection:Char
):Double;
class method Main(Args: array of String);
end;
IMPLEMENTATION
class method Prog.Main(Args: array of String);
begin
Console.WriteLine( 'Distance entre Montréal et Paris en Km: '+
Convert.ToString(CoordToDeltaKm(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E')));
Console.WriteLine( 'Distance entre Montréal et Paris en Miles: '+
Convert.ToString(CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E')));
Console.WriteLine('Distance entre Montréal et Paris en Miles Nautique: ' +
Convert.ToString(CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E')));
end;
class method Prog.CoordToDeltaKm(
Q1Latitude,Q1LatiDeg:Double;Q1LatiDirection:Char;
Q1Longitude,Q1LongDeg:Double;Q1LongDirection:Char;
Q2Latitude,Q2LatiDeg:Double;Q2LatiDirection:Char;
Q2Longitude,Q2LongDeg:Double;Q2LongDirection:Char
):Double;
Var
a1, b1, a2, b2, RawDelta:Double;
Begin
a1 := (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180;
IF Q1LatiDirection = 'N'Then a1 := -a1;
b1 := (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180;
IF Q1LongDirection = 'O'Then b1 := -b1;
a2 := (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180;
IF Q2LatiDirection = 'N'Then a2 := -a2;
b2 := (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180;
IF Q2LongDirection = 'O'Then b2 := -b2;
RawDelta := Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2));
Result:=RawDelta * 6378.0;
End;
class method Prog.CoordToDeltaStatuteMiles(
Q1Latitude,Q1LatiDeg:Double;Q1LatiDirection:Char;
Q1Longitude,Q1LongDeg:Double;Q1LongDirection:Char;
Q2Latitude,Q2LatiDeg:Double;Q2LatiDirection:Char;
Q2Longitude,Q2LongDeg:Double;Q2LongDirection:Char
):Double;
Var
a1, b1, a2, b2, RawDelta:Double;
Begin
a1 := (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180;
IF Q1LatiDirection = 'N'Then a1 := -a1;
b1 := (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180;
IF Q1LongDirection = 'O'Then b1 := -b1;
a2 := (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180;
IF Q2LatiDirection = 'N'Then a2 := -a2;
b2 := (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180;
IF Q2LongDirection = 'O'Then b2 := -b2;
RawDelta := Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2));
Result:=RawDelta * 3963.1;
End;
class method Prog.CoordToDeltaNauticalMiles(
Q1Latitude,Q1LatiDeg:Double;Q1LatiDirection:Char;
Q1Longitude,Q1LongDeg:Double;Q1LongDirection:Char;
Q2Latitude,Q2LatiDeg:Double;Q2LatiDirection:Char;
Q2Longitude,Q2LongDeg:Double;Q2LongDirection:Char
):Double;
Var
a1, b1, a2, b2, RawDelta:Double;
Begin
a1 := (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180;
IF Q1LatiDirection = 'N'Then a1 := -a1;
b1 := (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180;
IF Q1LongDirection = 'O'Then b1 := -b1;
a2 := (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180;
IF Q2LatiDirection = 'N'Then a2 := -a2;
b2 := (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180;
IF Q2LongDirection = 'O'Then b2 := -b2;
RawDelta := Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2));
Result:=RawDelta * 3443.9;
End;
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 17 février 2008