Distance intervilles avec coordonnees GPS

Marc -  
loupius Messages postés 789 Statut Membre -
Bonjour,

Je m'efforce de calculer la distance entre deux villes à partir de coordonnées GPS.

Soit Brest et Strasbourg. j'ai récupéré les infos sur wikipedia et vérifié avec Google Earth.

Brest :
Latitude : 48° 23? 27? Nord => 48 + 23/60 + 27/3600 = 48.390833
Longitude : 4° 29? 08? Est => 4 + 29/60 + 8/3600 = - 4.485555

Strasbourg :
Latitude : 48° 35? 04? Nord => 48 + 35/60 + 4/3600 = 48.584444
Longitude : 7° 44? 55? Est => 7 + 44/60 + 55/3600 = 7.74861

Calcul de la distance entre P1(x1,y1) et P2(x2,y2) :
d = Racine ( (x2-x1)^2 + (y2-y1)^2 )
d = Racine ( (48.58 - 48.39)^2 + (7.74 + 4.48)^2) = 12.2356
J'obtiens donc une distance 'd' de 12.2356.

Maintenant, je convertis en km. Je considère un rayon R de 6370 km. Je rappelle que la longueur d'un arc est (angle) x R. Et je fais une règle de 3 pour revenir aux radians.
d x R x 2PI / 360 = 12.2356 x 6370 x 2 x PI / 360 = 1360 km !!
Selon Earth : 920 km en ligne droite
Selon Maps : 1070 km
Et sur un autre site c'est 927 km.

Où est donc mon erreur ?

6 réponses

  1. La Terre n'est pas ronde
     
    Wikipédia : Calcul distance ente deux coordonnées géographiques
    0
  2. Marc
     
    Ouais, booon, d'accord pour l'aspect patatoïde, mais tout de même j'ai bien dû commettre une petite erreur mathématique, non ?
    0
  3. La Terre n'est pas ronde
     
    d'où le cosinus supplémentaire dans les calculs de longitude dans le lien du précédent post et donc le calcul de la norme à la fin.
    0
  4. Marc
     
    => La Terre n'est pas ronde

    J'ai repris les formules et j'arrive à un résultat de 1336 km.

    En javascript :

    var iEarthR = 6378.137;

    var iThetaLatitude = oPoint2.latitude.value - oPoint1.latitude.value;
    var iThetaLongitude = oPoint2.longitude.value - oPoint1.longitude.value;

    var iDeltaLatitude = iThetaLatitude*iEarthR*Math.PI/180;
    var iDeltaLongitude = iThetaLongitude*iEarthR*Math.cos(iThetaLatitude)*Math.PI/180;

    var iDistanceKm = Math.sqrt( iDeltaLatitude*iDeltaLatitude + iDeltaLongitude*iDeltaLongitude );

    et d'où un résultat de 1336 km.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. loupius Messages postés 789 Statut Membre 148
     
    Si le calcul:
    d = Racine ( (x2-x1)^2 + (y2-y1)^2 )
    est juste pour deux points sur un même plan, il est faux pour deux angles dans l'espace.
    Supposons deux points situés très près du pôle Nord (lattitude proche de 90°) l'un étant à la longitude 0° et l'autre à la longitude 90°. D'après ton calcul:
    d = Racine((0-90)^2 + (90-90)^2) soit 90°. Or l'angle, vu du centre de la terre sera proche de 0° ... !!!
    D'autre part tu définis une distance 'd' que tu prends ensuite pour un angle...
    Bonne réflexion.
    0
  7. Marc
     
    => Loupius

    Yep pour le calcul initial, mais j'ai ensuite repris la technique spécifiée par "La Terre n'est pas ronde " sur la page de wikipedia :

    http://fr.wikipedia.org/wiki/Calcul_distance_ente_deux_coordonn%C3%A9es_g%C3%A9ographiques

    Et j'arrive à un résultat surprenant. Il doit bien y avoir une erreur, mais je n'arrive pas à trouver où. C'est curieux et frustrant à la fois.
    0
    1. loupius Messages postés 789 Statut Membre 148
       
      Brest : Latitude : 48° 23? 27? Nord, Longitude : 4° 29? 08? Est
      Un détail: Brest est à l'Ouest de Greenwitch.
      La formule utilisée me semble douteuse. Essaye plutôt cette formule trouvée sur le net:
      R Arccos (sin(lat A)sin(lat B)+cos(lat A)cos(lat B)cos(long A- long B))
      Ainsi tu devrais trouver 902 km.
      Bonne continuation.
      0