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 Modula-2 suivant, vous trouvez la réponse que vous souhaitez :
- MODULE CoordToDelta;
-
- FROM InOut IMPORT WriteString, WriteLn;
- FROM SRealIO IMPORT WriteReal;
- FROM RealMath IMPORT arccos,cos,sin;
-
- CONST PI=3.14159265358979224;
-
- PROCEDURE CoordToDeltaKm(
- Q1Latitude,Q1LatiDeg:REAL;Q1LatiDirection:CHAR;
- Q1Longitude,Q1LongDeg:REAL;Q1LongDirection:CHAR;
- Q2Latitude,Q2LatiDeg:REAL;Q2LatiDirection:CHAR;
- Q2Longitude,Q2LongDeg:REAL;Q2LongDirection:CHAR
- ):REAL;
- VAR
- a1,b1,a2,b2,RawDelta:REAL;
- BEGIN
- a1:=(Q1Latitude+(Q1LatiDeg/60.0))*PI/180.0;
- IF Q1LatiDirection='N'THEN
- a1:=-a1;
- END;
- b1:=(Q1Longitude+(Q1LongDeg/60.0))*PI/180.0;
- IF Q1LongDirection='O'THEN
- b1:=-b1;
- END;
- a2:=(Q2Latitude+(Q2LatiDeg/60.0))*PI/180.0;
- IF Q2LatiDirection='N'THEN
- a2:=-a2;
- END;
- b2:=(Q2Longitude+(Q2LongDeg/60.0))*PI/180.0;
- IF Q2LongDirection='O'THEN
- b2:=-b2;
- END;
- 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 CoordToDeltaKm;
-
- PROCEDURE CoordToDeltaStatuteMiles(
- Q1Latitude,Q1LatiDeg:REAL;Q1LatiDirection:CHAR;
- Q1Longitude,Q1LongDeg:REAL;Q1LongDirection:CHAR;
- Q2Latitude,Q2LatiDeg:REAL;Q2LatiDirection:CHAR;
- Q2Longitude,Q2LongDeg:REAL;Q2LongDirection:CHAR
- ):REAL;
- VAR
- a1,b1,a2,b2,RawDelta:REAL;
- BEGIN
- a1:=(Q1Latitude+(Q1LatiDeg/60.0))*PI/180.0;
- IF Q1LatiDirection='N'THEN
- a1:=-a1;
- END;
- b1:=(Q1Longitude+(Q1LongDeg/60.0))*PI/180.0;
- IF Q1LongDirection='O'THEN
- b1:=-b1;
- END;
- a2:=(Q2Latitude+(Q2LatiDeg/60.0))*PI/180.0;
- IF Q2LatiDirection='N'THEN
- a2:=-a2;
- END;
- b2:=(Q2Longitude+(Q2LongDeg/60.0))*PI/180.0;
- IF Q2LongDirection='O'THEN
- b2:=-b2;
- END;
- 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 CoordToDeltaStatuteMiles;
-
- PROCEDURE CoordToDeltaNauticalMiles(
- Q1Latitude,Q1LatiDeg:REAL;Q1LatiDirection:CHAR;
- Q1Longitude,Q1LongDeg:REAL;Q1LongDirection:CHAR;
- Q2Latitude,Q2LatiDeg:REAL;Q2LatiDirection:CHAR;
- Q2Longitude,Q2LongDeg:REAL;Q2LongDirection:CHAR
- ):REAL;
- VAR
- a1,b1,a2,b2,RawDelta:REAL;
- BEGIN
- a1:=(Q1Latitude+(Q1LatiDeg/60.0))*PI/180.0;
- IF Q1LatiDirection='N'THEN
- a1:=-a1;
- END;
- b1:=(Q1Longitude+(Q1LongDeg/60.0))*PI/180.0;
- IF Q1LongDirection='O'THEN
- b1:=-b1;
- END;
- a2:=(Q2Latitude+(Q2LatiDeg/60.0))*PI/180.0;
- IF Q2LatiDirection='N'THEN
- a2:=-a2;
- END;
- b2:=(Q2Longitude+(Q2LongDeg/60.0))*PI/180.0;
- IF Q2LongDirection='O'THEN
- b2:=-b2;
- END;
- 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 CoordToDeltaNauticalMiles;
-
- BEGIN
- WriteString('Distance entre Montréal et Paris en Km: ');
- WriteReal(CoordToDeltaKm(45.0, 31.0,'N',73.0, 34.0,'O',48.0, 50.0,'N', 2.0, 20.0,'E'),10);
- WriteLn;
- WriteString('Distance entre Montréal et Paris en Miles: ');
- WriteReal(CoordToDeltaStatuteMiles(45.0, 31.0,'N', 73.0, 34.0,'O', 48.0, 50.0,'N', 2.0, 20.0,'E'),10);
- WriteLn;
- WriteString('Distance entre Montréal et Paris en Miles Nautique: ');
- WriteReal(CoordToDeltaNauticalMiles(45.0, 31.0,'N', 73.0, 34.0,'O', 48.0, 50.0,'N', 2.0, 20.0,'E'),10);
- WriteLn;
- END CoordToDelta.
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 11 janvier 2015