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 TCL (Tool Command Language) suivant, vous trouvez la réponse que vous souhaitez:
#! /usr/bin/tclsh
proc CoordToDeltaKm {Q1Latitude Q1LatiDeg Q1LatiDirection Q1Longitude Q1LongDeg Q1LongDirection Q2Latitude Q2LatiDeg Q2LatiDirection Q2Longitude Q2LongDeg Q2LongDirection} {
set pi [expr {3.141592653589793}]
set a1 [expr {($Q1Latitude+($Q1LatiDeg/60.0))*$pi/180.0}]
if {$Q1LatiDirection eq "N"} {
set a1 [expr {-$a1}]
}
set b1 [expr {($Q1Longitude+($Q1LongDeg/60.0))*$pi/180.0}]
if {$Q1LongDirection eq "O"} {
set b1 [expr {-$b1}]
}
set a2 [expr {($Q2Latitude+($Q2LatiDeg/60.0))*$pi/180.0}]
if {$Q2LatiDirection eq "N"} {
set a2 [expr {-$a2}]
}
set b2 [expr {($Q2Longitude+($Q2LongDeg/60.0))*$pi/180.0}]
if {$Q2LongDirection eq "O"} {
set b2 [expr {-$b2}]
}
set RawDelta [expr {acos(cos($a1)*cos($b1)*cos($a2)*cos($b2) + cos($a1)*sin($b1)*cos($a2)*sin($b2) + sin($a1)*sin($a2))}]
return [expr {$RawDelta * 6378.0}]
}
proc CoordToDeltaStatuteMiles {Q1Latitude Q1LatiDeg Q1LatiDirection Q1Longitude Q1LongDeg Q1LongDirection Q2Latitude Q2LatiDeg Q2LatiDirection Q2Longitude Q2LongDeg Q2LongDirection} {
set pi [expr {3.141592653589793}]
set a1 [expr {($Q1Latitude+($Q1LatiDeg/60.0))*$pi/180.0}]
if {$Q1LatiDirection eq "N"} {
set a1 [expr {-$a1}]
}
set b1 [expr {($Q1Longitude+($Q1LongDeg/60.0))*$pi/180.0}]
if {$Q1LongDirection eq "O"} {
set b1 [expr {-$b1}]
}
set a2 [expr {($Q2Latitude+($Q2LatiDeg/60.0))*$pi/180.0}]
if {$Q2LatiDirection eq "N"} {
set a2 [expr {-$a2}]
}
set b2 [expr {($Q2Longitude+($Q2LongDeg/60.0))*$pi/180.0}]
if {$Q2LongDirection eq "O"} {
set b2 [expr {-$b2}]
}
set RawDelta [expr {acos(cos($a1)*cos($b1)*cos($a2)*cos($b2) + cos($a1)*sin($b1)*cos($a2)*sin($b2) + sin($a1)*sin($a2))}]
return [expr {$RawDelta * 3963.1}]
}
proc CoordToDeltaNauticalMiles {Q1Latitude Q1LatiDeg Q1LatiDirection Q1Longitude Q1LongDeg Q1LongDirection Q2Latitude Q2LatiDeg Q2LatiDirection Q2Longitude Q2LongDeg Q2LongDirection} {
set pi [expr {3.141592653589793}]
set a1 [expr {($Q1Latitude+($Q1LatiDeg/60.0))*$pi/180.0}]
if {$Q1LatiDirection eq "N"} {
set a1 [expr {-$a1}]
}
set b1 [expr {($Q1Longitude+($Q1LongDeg/60.0))*$pi/180.0}]
if {$Q1LongDirection eq "O"} {
set b1 [expr {-$b1}]
}
set a2 [expr {($Q2Latitude+($Q2LatiDeg/60.0))*$pi/180.0}]
if {$Q2LatiDirection eq "N"} {
set a2 [expr {-$a2}]
}
set b2 [expr {($Q2Longitude+($Q2LongDeg/60.0))*$pi/180.0}]
if {$Q2LongDirection eq "O"} {
set b2 [expr {-$b2}]
}
set RawDelta [expr {acos(cos($a1)*cos($b1)*cos($a2)*cos($b2) + cos($a1)*sin($b1)*cos($a2)*sin($b2) + sin($a1)*sin($a2))}]
return [expr {$RawDelta * 3443.9}]
}
puts "Distance entre Montréal et Paris en Km: [CoordToDeltaKm 45.0 31.0 \"N\" 73.0 34.0 \"O\" 48.0 50.0 \"N\" 2.0 20.0 \"E\"]\n"
puts "Distance entre Montréal et Paris en Miles: [CoordToDeltaStatuteMiles 45.0 31.0 \"N\" 73.0 34.0 \"O\" 48.0 50.0 \"N\" 2.0 20.0 \"E\"]\n"
puts "Distance entre Montréal et Paris en Miles Nautique: [CoordToDeltaNauticalMiles 45.0 31.0 \"N\" 73.0 34.0 \"O\" 48.0 50.0 \"N\" 2.0 20.0 \"E\")]\n"
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 : Vendredi, le 15 août 2014