Gladir.com - Euphoria - Calcul la distance entre deux coordonnées de Longitude et Latitude

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éss suivantes:
Ville Latitude Longitude
Montréal 45 31N 73 34O
Paris 48 50N 2 20E
A l'aide du code source Euphoria suivant, vous trouvez la réponse que vous souhaitez:
include misc.e

constant SCREEN = 1 

function CoordToDeltaKm(
 atom Q1Latitude,atom Q1LatiDeg,sequence Q1LatiDirection,
 atom Q1Longitude,atom Q1LongDeg,sequence Q1LongDirection,
 atom Q2Latitude,atom Q2LatiDeg,sequence Q2LatiDirection,
 atom Q2Longitude,atom Q2LongDeg,sequence Q2LongDirection
)
     atom a1,b1,a2,b2,RawDelta
     a1=(Q1Latitude+(Q1LatiDeg/60))*PI/180
     if equal(Q1LatiDirection,"N")then
        a1=-a1
     end if
     b1=(Q1Longitude+(Q1LongDeg/60))*PI/180
     if equal(Q1LongDirection,"O")then
        b1=-b1
     end if
     a2=(Q2Latitude+(Q2LatiDeg/60))*PI/180
     if equal(Q2LatiDirection,"N")then 
        a2=-a2
     end if
     b2=(Q2Longitude+(Q2LongDeg/60))*PI/180
     if equal(Q2LongDirection,"O")then 
        b2=-b2
     end if
     RawDelta = arccos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2))
     return RawDelta * 6378.0 
end function

function CoordToDeltaStatuteMiles(
 atom Q1Latitude,atom Q1LatiDeg,sequence Q1LatiDirection,
 atom Q1Longitude,atom Q1LongDeg,sequence Q1LongDirection,
 atom Q2Latitude,atom Q2LatiDeg,sequence Q2LatiDirection,
 atom Q2Longitude,atom Q2LongDeg,sequence Q2LongDirection
)
     atom a1,b1,a2,b2,RawDelta
     a1=(Q1Latitude+(Q1LatiDeg/60))*PI/180
     if equal(Q1LatiDirection,"N")then
        a1=-a1
     end if
     b1=(Q1Longitude+(Q1LongDeg/60))*PI/180
     if equal(Q1LongDirection,"O")then
        b1=-b1
     end if
     a2=(Q2Latitude+(Q2LatiDeg/60))*PI/180
     if equal(Q2LatiDirection,"N")then 
        a2=-a2
     end if
     b2=(Q2Longitude+(Q2LongDeg/60))*PI/180
     if equal(Q2LongDirection,"O")then 
        b2=-b2
     end if
     RawDelta = arccos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2))
     return RawDelta * 3963.1  
end function

function CoordToDeltaNauticalMiles(
 atom Q1Latitude,atom Q1LatiDeg,sequence Q1LatiDirection,
 atom Q1Longitude,atom Q1LongDeg,sequence Q1LongDirection,
 atom Q2Latitude,atom Q2LatiDeg,sequence Q2LatiDirection,
 atom Q2Longitude,atom Q2LongDeg,sequence Q2LongDirection
)
     atom a1,b1,a2,b2,RawDelta
     a1=(Q1Latitude+(Q1LatiDeg/60))*PI/180
     if equal(Q1LatiDirection,"N")then
        a1=-a1
     end if
     b1=(Q1Longitude+(Q1LongDeg/60))*PI/180
     if equal(Q1LongDirection,"O")then
        b1=-b1
     end if
     a2=(Q2Latitude+(Q2LatiDeg/60))*PI/180
     if equal(Q2LatiDirection,"N")then 
        a2=-a2
     end if
     b2=(Q2Longitude+(Q2LongDeg/60))*PI/180
     if equal(Q2LongDirection,"O")then 
        b2=-b2
     end if
     RawDelta = arccos(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2))
     return RawDelta * 3443.9  
end function


printf(SCREEN,"Distance entre Montréal et Paris en Km: %f\n",
        CoordToDeltaKm(45, 31,"N",73, 34,"O",48, 50,"N", 2,  20,"E"))
printf(SCREEN,"Distance entre Montréal et Paris en Miles: %f\n",
        CoordToDeltaStatuteMiles(45, 31,"N", 73, 34,"O",    48, 50,"N", 2,  20,"E"))
printf(SCREEN,"Distance entre Montréal et Paris en Miles Nautique: %f\n",
        CoordToDeltaNauticalMiles(45, 31,"N", 73, 34,"O",    48, 50,"N", 2,  20,"E"))
on obtiendra le résultat suivant:
Distance entre Montréal et Paris en Km: 5510.16761889
Distance 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 7 février 2006