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 C suivant pour le Quick C de Microsoft, vous trouvez la réponse que vous souhaitez:
#include <math.h>
#include <stdio.h>
#define M_PI 3.14159265358979224
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))*M_PI/180;
if(Q1LatiDirection=='N') a1=-a1;
b1=(Q1Longitude+(Q1LongDeg/60))*M_PI/180;
if(Q1LongDirection=='O') b1=-b1;
a2=(Q2Latitude+(Q2LatiDeg/60))*M_PI/180;
if(Q2LatiDirection=='N') a2=-a2;
b2=(Q2Longitude+(Q2LongDeg/60))*M_PI/180;
if(Q2LongDirection=='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;
}
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))*M_PI/180;
if(Q1LatiDirection=='N') a1=-a1;
b1=(Q1Longitude+(Q1LongDeg/60))*M_PI/180;
if(Q1LongDirection=='O') b1=-b1;
a2=(Q2Latitude+(Q2LatiDeg/60))*M_PI/180;
if(Q2LatiDirection=='N') a2=-a2;
b2=(Q2Longitude+(Q2LongDeg/60))*M_PI/180;
if(Q2LongDirection=='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;
}
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))*M_PI/180;
if(Q1LatiDirection=='N') a1=-a1;
b1=(Q1Longitude+(Q1LongDeg/60))*M_PI/180;
if(Q1LongDirection=='O') b1=-b1;
a2=(Q2Latitude+(Q2LatiDeg/60))*M_PI/180;
if(Q2LatiDirection=='N') a2=-a2;
b2=(Q2Longitude+(Q2LongDeg/60))*M_PI/180;
if(Q2LongDirection=='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;
}
void main() {
printf("Distance entre Montréal et Paris en Km: %f\n",CoordToDeltaKm(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'));
printf("Distance entre Montréal et Paris en Miles: %f\n ",CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'));
printf("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.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 28 juin 2015