Section courante

A propos

Section administrative du site

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 ASP.NET (VB.NET) suivant, vous trouvez la réponse que vous souhaitez :

  1. <%@ Page Language="VB" %>
  2. <script runat="server">
  3.     Function CoordToDeltaKm( _
  4.      Q1Latitude As Double, Q1LatiDeg As Double, Q1LatiDirection As Char, _
  5.      Q1Longitude As Double, Q1LongDeg As Double, Q1LongDirection As Char, _
  6.      Q2Latitude As Double, Q2LatiDeg As Double, Q2LatiDirection As Char, _
  7.      Q2Longitude As Double, Q2LongDeg As Double, Q2LongDirection As Char) As Double
  8.         Dim a1, b1, a2, b2, RawDelta As Double
  9.         a1 = (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180
  10.         If Q1LatiDirection = "N" Then
  11.             a1 = -a1
  12.         End If
  13.         b1 = (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180
  14.         If Q1LongDirection = "O" Then
  15.             b1 = -b1
  16.         End If
  17.         a2 = (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180
  18.         If Q2LatiDirection = "N" Then
  19.             a2 = -a2
  20.         End If
  21.         b2 = (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180
  22.         If Q2LongDirection = "O" Then
  23.             b2 = -b2
  24.         End If
  25.         RawDelta = Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2))
  26.         CoordToDeltaKm = RawDelta * 6378.0
  27.     End Function
  28.  
  29.     Function CoordToDeltaStatuteMiles( _
  30.      Q1Latitude As Double, Q1LatiDeg As Double, Q1LatiDirection As Char, _
  31.      Q1Longitude As Double, Q1LongDeg As Double, Q1LongDirection As Char, _
  32.      Q2Latitude As Double, Q2LatiDeg As Double, Q2LatiDirection As Char, _
  33.      Q2Longitude As Double, Q2LongDeg As Double, Q2LongDirection As Char) As Double
  34.         Dim a1, b1, a2, b2, RawDelta As Double
  35.         a1 = (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180
  36.         If Q1LatiDirection = "N" Then
  37.             a1 = -a1
  38.         End If
  39.         b1 = (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180
  40.         If Q1LongDirection = "O" Then
  41.             b1 = -b1
  42.         End If
  43.         a2 = (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180
  44.         If Q2LatiDirection = "N" Then
  45.             a2 = -a2
  46.         End If
  47.         b2 = (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180
  48.         If Q2LongDirection = "O" Then
  49.             b2 = -b2
  50.         End If
  51.         RawDelta = Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2))
  52.         CoordToDeltaStatuteMiles = RawDelta * 3963.1
  53.     End Function
  54.  
  55.  
  56.     Function CoordToDeltaNauticalMiles( _
  57.      Q1Latitude As Double, Q1LatiDeg As Double, Q1LatiDirection As Char, _
  58.      Q1Longitude As Double, Q1LongDeg As Double, Q1LongDirection As Char, _
  59.      Q2Latitude As Double, Q2LatiDeg As Double, Q2LatiDirection As Char, _
  60.      Q2Longitude As Double, Q2LongDeg As Double, Q2LongDirection As Char) As Double
  61.         Dim a1, b1, a2, b2, RawDelta As Double
  62.         a1 = (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180
  63.         If Q1LatiDirection = "N" Then
  64.             a1 = -a1
  65.         End If
  66.         b1 = (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180
  67.         If Q1LongDirection = "O" Then
  68.             b1 = -b1
  69.         End If
  70.         a2 = (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180
  71.         If Q2LatiDirection = "N" Then
  72.             a2 = -a2
  73.         End If
  74.         b2 = (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180
  75.         If Q2LongDirection = "O" Then
  76.             b2 = -b2
  77.         End If
  78.         RawDelta = Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2))
  79.         CoordToDeltaNauticalMiles = RawDelta * 3443.9
  80.     End Function
  81. </script>
  82. <%
  83. Response.Write("Distance entre Montréal et Paris en Km: " &CStr(CoordToDeltaKm(45, 31,"N",73, 34,"O",48, 50,"N", 2,  20,"E")) &"<BR>")
  84. Response.Write("Distance entre Montréal et Paris en Miles: " &CStr(CoordToDeltaStatuteMiles(45, 31,"N", 73, 34,"O",    48, 50,"N", 2,  20,"E")) &"<BR>")
  85. Response.Write("Distance entre Montréal et Paris en Miles Nautique: " &CStr(CoordToDeltaNauticalMiles(45, 31,"N", 73, 34,"O",    48, 50,"N", 2,  20,"E")) &"<BR>")
  86. %>

ou en version ASP.NET (C# (C Sharp)) :

  1. <%@ Page Language="C#" %>
  2. <script runat="server">
  3.          static double CoordToDeltaKm(
  4.         double Q1Latitude, double Q1LatiDeg, char Q1LatiDirection,
  5.         double Q1Longitude, double Q1LongDeg, char Q1LongDirection,
  6.         double Q2Latitude, double Q2LatiDeg, char Q2LatiDirection,
  7.         double Q2Longitude, double Q2LongDeg, char Q2LongDirection
  8.     )
  9.         {
  10.             double a1, b1, a2, b2, RawDelta;
  11.             a1 = (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180;
  12.             if (Q1LatiDirection == 'N') a1 = -a1;
  13.             b1 = (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180;
  14.             if (Q1LongDirection == 'O') b1 = -b1;
  15.             a2 = (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180;
  16.             if (Q2LatiDirection == 'N') a2 = -a2;
  17.             b2 = (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180;
  18.             if (Q2LongDirection == 'O') b2 = -b2;
  19.             RawDelta = Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2));
  20.             return RawDelta * 6378.0;
  21.         }
  22.  
  23.         static double CoordToDeltaStatuteMiles(
  24.             double Q1Latitude, double Q1LatiDeg, char Q1LatiDirection,
  25.             double Q1Longitude, double Q1LongDeg, char Q1LongDirection,
  26.             double Q2Latitude, double Q2LatiDeg, char Q2LatiDirection,
  27.             double Q2Longitude, double Q2LongDeg, char Q2LongDirection
  28.         )
  29.         {
  30.             double a1, b1, a2, b2, RawDelta;
  31.             a1 = (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180;
  32.             if (Q1LatiDirection == 'N') a1 = -a1;
  33.             b1 = (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180;
  34.             if (Q1LongDirection == 'O') b1 = -b1;
  35.             a2 = (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180;
  36.             if (Q2LatiDirection == 'N') a2 = -a2;
  37.             b2 = (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180;
  38.             if (Q2LongDirection == 'O') b2 = -b2;
  39.             RawDelta = Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2));
  40.             return RawDelta * 3963.1;
  41.         }
  42.  
  43.         static double CoordToDeltaNauticalMiles(
  44.             double Q1Latitude, double Q1LatiDeg, char Q1LatiDirection,
  45.             double Q1Longitude, double Q1LongDeg, char Q1LongDirection,
  46.             double Q2Latitude, double Q2LatiDeg, char Q2LatiDirection,
  47.             double Q2Longitude, double Q2LongDeg, char Q2LongDirection
  48.         )
  49.         {
  50.             double a1, b1, a2, b2, RawDelta;
  51.             a1 = (Q1Latitude + (Q1LatiDeg / 60)) * Math.PI / 180;
  52.             if (Q1LatiDirection == 'N') a1 = -a1;
  53.             b1 = (Q1Longitude + (Q1LongDeg / 60)) * Math.PI / 180;
  54.             if (Q1LongDirection == 'O') b1 = -b1;
  55.             a2 = (Q2Latitude + (Q2LatiDeg / 60)) * Math.PI / 180;
  56.             if (Q2LatiDirection == 'N') a2 = -a2;
  57.             b2 = (Q2Longitude + (Q2LongDeg / 60)) * Math.PI / 180;
  58.             if (Q2LongDirection == 'O') b2 = -b2;
  59.             RawDelta = Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) + Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2));
  60.             return RawDelta * 3443.9;
  61.         } 
  62. </script>
  63. <%
  64. Response.Write("Distance entre Montréal et Paris en Km: " + CoordToDeltaKm(45, 31,'N',73, 34,'O',48, 50,'N', 2,  20,'E') + "<BR>");
  65. Response.Write("Distance entre Montréal et Paris en Miles: " + CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O',    48, 50,'N', 2,  20,'E') + "<BR>");
  66. Response.Write("Distance entre Montréal et Paris en Miles Nautique: " + CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O',    48, 50,'N', 2,  20,'E') + "<BR>");
  67. %>

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

Voir également

Langage de programmation - Visual Basic .NET (VB .NET) - Calcul la distance entre deux coordonnées de Longitude et Latitude
Langage de programmation - C# (C Sharp) - Calcul la distance entre deux coordonnées de Longitude et Latitude

Dernière mise à jour : Samedi, le 31 août 2017