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 AWK suivant, vous trouvez la réponse que vous souhaitez:
#! /bin/sh
BEGIN {
pi=3.141592653589793;
print "Distance entre Montréal et Paris en Km: " CoordToDeltaKm(45, 31,"N", 73, 34,"O", 48, 50,"N", 2, 20,"E") "\n";
print "Distance entre Montréal et Paris en Miles: " CoordToDeltaStatuteMiles(45, 31,"N", 73, 34,"O", 48, 50,"N", 2, 20,"E") "\n";
print "Distance entre Montréal et Paris en Miles Nautique: " CoordToDeltaNauticalMiles(45, 31,"N", 73, 34,"O", 48, 50,"N", 2, 20,"E") "\n";
exit;
}
function abs(a) {
if(a<0) a=-a;
return a;
}
function acos(a) {
if(abs(a)==1) {
return (1-a)*pi/2
} else {
return atan2(-a,sqrt(1-a*a))+2*atan2(0.5,0.5)
}
}
function CoordToDeltaKm(Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection) {
a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180;
if(Q1LatiDirection eq "N") {
a1=-a1;
}
b1=(Q1Longitude+(Q1LongDeg/60))*pi/180;
if(Q1LongDirection eq "O") {
b1=-b1;
}
a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180;
if(Q2LatiDirection eq "N") {
a2=-a2;
}
b2=(Q2Longitude+(Q2LongDeg/60))*pi/180;
if(Q2LongDirection eq "O") {
b2=-b2;
}
RawDelta = acos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2));
return RawDelta * 6378.0;
}
function CoordToDeltaStatuteMiles(Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection ) {
a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180;
if(Q1LatiDirection eq "N") {
a1=-a1;
}
b1=(Q1Longitude+(Q1LongDeg/60))*pi/180;
if(Q1LongDirection eq "O") {
b1=-b1;
}
a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180;
if(Q2LatiDirection eq "N") {
a2=-a2;
}
b2=(Q2Longitude+(Q2LongDeg/60))*pi/180;
if(Q2LongDirection eq "O") {
b2=-b2;
}
RawDelta = acos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2));
return RawDelta * 3963.1;
}
function CoordToDeltaNauticalMiles(Q1Latitude,Q1LatiDeg,Q1LatiDirection,Q1Longitude,Q1LongDeg,Q1LongDirection,Q2Latitude,Q2LatiDeg,Q2LatiDirection,Q2Longitude,Q2LongDeg,Q2LongDirection ) {
a1=(Q1Latitude+(Q1LatiDeg/60))*pi/180;
if(Q1LatiDirection eq "N") {
a1=-a1;
}
b1=(Q1Longitude+(Q1LongDeg/60))*pi/180;
if(Q1LongDirection eq "O") {
b1=-b1;
}
a2=(Q2Latitude+(Q2LatiDeg/60))*pi/180;
if(Q2LatiDirection eq "N") {
a2=-a2;
}
b2=(Q2Longitude+(Q2LongDeg/60))*pi/180;
if(Q2LongDirection eq "O") {
b2=-b2;
}
RawDelta = acos(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 : Dimanche, le 12 mars 2006