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 Visual C++ .NET 2003 suivant, vous trouverez la réponse que vous souhaitez :
- #include "stdafx.h"
- #include "iostream"
- #include "NxMath.h"
-
- double CoordToDeltaKm(
- double Q1Latitude,double Q1LatiDeg, char Q1LatiDirection,
- double Q1Longitude,double Q1LongDeg, char Q1LongDirection,
- double Q2Latitude,double Q2LatiDeg, char Q2LatiDirection,
- double Q2Longitude,double Q2LongDeg, char Q2LongDirection
- ) {
- double a1,b1,a2,b2,RawDelta;
- a1=(Q1Latitude+(Q1LatiDeg/60)) * NxPiF64/180;
- if(Q1LatiDirection=='N') a1=-a1;
- b1=(Q1Longitude+(Q1LongDeg/60)) * NxPiF64/180;
- if(Q1LongDirection=='O') b1=-b1;
- a2=(Q2Latitude+(Q2LatiDeg/60)) * NxPiF64/180;
- if(Q2LatiDirection=='N') a2=-a2;
- b2=(Q2Longitude+(Q2LongDeg/60)) * NxPiF64/180;
- if(Q2LongDirection=='O') b2=-b2;
- RawDelta = NxMath::acos(NxMath::cos(a1) * NxMath::cos(b1) * NxMath::cos(a2) * NxMath::cos(b2) + NxMath::cos(a1)*NxMath::sin(b1)*NxMath::cos(a2)*NxMath::sin(b2) + NxMath::sin(a1)*NxMath::sin(a2));
- return RawDelta * 6378.0;
- }
-
- double CoordToDeltaStatuteMiles(
- double Q1Latitude,double Q1LatiDeg, char Q1LatiDirection,
- double Q1Longitude,double Q1LongDeg, char Q1LongDirection,
- double Q2Latitude,double Q2LatiDeg, char Q2LatiDirection,
- double Q2Longitude,double Q2LongDeg, char Q2LongDirection
- ) {
- double a1,b1,a2,b2,RawDelta;
- a1=(Q1Latitude+(Q1LatiDeg/60)) * NxPiF64/180;
- if(Q1LatiDirection=='N') a1=-a1;
- b1=(Q1Longitude+(Q1LongDeg/60)) * NxPiF64/180;
- if(Q1LongDirection=='O') b1=-b1;
- a2=(Q2Latitude+(Q2LatiDeg/60)) * NxPiF64/180;
- if(Q2LatiDirection=='N') a2=-a2;
- b2=(Q2Longitude+(Q2LongDeg/60)) * NxPiF64/180;
- if(Q2LongDirection=='O') b2=-b2;
- RawDelta = NxMath::acos(NxMath::cos(a1)*NxMath::cos(b1)*NxMath::cos(a2)*NxMath::cos(b2) + NxMath::cos(a1)*NxMath::sin(b1)*NxMath::cos(a2)*NxMath::sin(b2) + NxMath::sin(a1)*NxMath::sin(a2));
- return RawDelta * 3963.1;
- }
-
- double CoordToDeltaNauticalMiles(
- double Q1Latitude,double Q1LatiDeg, char Q1LatiDirection,
- double Q1Longitude,double Q1LongDeg, char Q1LongDirection,
- double Q2Latitude,double Q2LatiDeg, char Q2LatiDirection,
- double Q2Longitude,double Q2LongDeg, char Q2LongDirection
- ) {
- double a1,b1,a2,b2,RawDelta;
- a1=(Q1Latitude+(Q1LatiDeg/60)) * NxPiF64/180;
- if(Q1LatiDirection=='N') a1=-a1;
- b1=(Q1Longitude+(Q1LongDeg/60)) * NxPiF64/180;
- if(Q1LongDirection=='O') b1=-b1;
- a2=(Q2Latitude+(Q2LatiDeg/60)) * NxPiF64/180;
- if(Q2LatiDirection=='N') a2=-a2;
- b2=(Q2Longitude+(Q2LongDeg/60)) * NxPiF64/180;
- if(Q2LongDirection=='O') b2=-b2;
- RawDelta = NxMath::acos(NxMath::cos(a1)*NxMath::cos(b1)*NxMath::cos(a2)*NxMath::cos(b2) + NxMath::cos(a1)*NxMath::sin(b1)*NxMath::cos(a2)*NxMath::sin(b2) + NxMath::sin(a1)*NxMath::sin(a2));
- return RawDelta * 3443.9;
- }
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::cout << "Distance entre Montréal et Paris en Km: " <<
- CoordToDeltaKm(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E') << std::endl;
- std::cout << "Distance entre Montréal et Paris en Miles: " <<
- CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E') << std::endl;
- std::cout << "Distance entre Montréal et Paris en Miles Nautique: " <<
- CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E') << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
Distance entre MontrÚal et Paris en Km: 5510.17Distance entre MontrÚal et Paris en Miles: 3423.85
Distance entre MontrÚal et Paris en Miles Nautique: 2975.3
Dernière mise à jour : Vendredi, le 2 août 2013