Chez ZeGuigui

Le blog d'un geek chasseur de licornes au clair de lune

Chez ZeGuigui
Technique

Calcul de la distance entre deux points « GPS »

La Terre vue depuis Apollo 17 (merci la NASA !)Pour celles et ceux qui voudraient connaître une méthode rapide pour calculer la distance à vol d’oiseau entre deux points dont on connait les coordonnées GPS voici comment faire. Attention, allergiques aux math s’abstenir 🙂

On suppose ici, pour simplifier, que la terre est une sphère. Je sais, ce n’est pas exact et le relief peut également intervenir (c’est pour ça que j’ai écrit à vol d’oiseau !). On suppose aussi que l’on dispose des coordonnées GPS (lattitude et longitude) en degrés et non pas en degrés, minutes, secondes.

La première étape consiste à convertir nos degrés en radians. Ca c’est facile, il suffit de tout multiplier par 2?/360.

Ensuite la distance c’est, si le point source a comme coordonnées (sourceLat, sourceLong) et le point destination (destLat, destLong) :

d = R * (Pi/2 – ArcSin( sin(destLat) * sin(sourceLat) + cos(destLong – sourceLong) * cos(destLat) * cos(sourceLat)))

L’unité de d dépendra de l’unité prise pour le rayon. Si celui-ci est exprimé en km alors la distance sera elle aussi en kilomètres.

Pour R je prend généralement 6378km.

23 réflexions sur “Calcul de la distance entre deux points « GPS »

  • Olivier

    C’est la distance la plus courte que tu as retenue, je vois… Ah que c’est bon de ressortir la formule de la loxodromie ;-p qui s’applique mieux sur mer ou dans les airs que sur terre ! Mais ce qui serait bien aussi c’est que tu nous expliques comment suivre la route pour faire le moins de chemin possible.

    Répondre
  • oaui, ben moi je continue à dire que y a rien de mieux qu’une bonne vieille carte Michelin!! 😉

    Répondre
  • Les algorithmes de plus court chemin c’est un rien plus compliqué… En fait tout dépend du temps que tu as pour calculer le chemin (si tu veux le faire en temps réel ou pas). Ca représente tout un pan de l’algorithmie ce truc là !
    Deux des algorithmes classiques sont celui de Floyd (mais gourmand en calcul car en O(n3)) et celui de Dijkstra (O(a2ln n) où a est le nombre d’arrêtes).
    Je me souviens qu’en 4ème année à l’ESIEE on nous avait fait un exam où on déroulait le Dijkstra à la main… qu’est-ce qu’on s’ammusait !

    Répondre
  • Pour Olivier (et les autres lecteurs) qui ne comprendraient pas la remarque de Caro, il faut lire le blog de Céline et Renaud et les commentaires associés 🙂
    Pour en revenir au problème de plus court chemin associé à la cartographie c’est encore plus compliqué… et pour aller de chez moi à chez mon voisin je peux passer par Londres si ça m’amuse mais est-ce que l’algorithme doit considérer cette étape ? Non il faut limiter le graphe car sinon le temps de calcul explose !
    Et pour compliquer l’affaire ce n’est pas parce qu’une route est limitée à 90km/h que l’on peut effectivement conduire à cette vitesse en permanence (ceci dit là je glisse de plus court chemin à chemin le plus rapide ce qui n’est jamais qu’un changement de la pondération des arrêtes). Par exemple en aglomération, généralement limitée à 50km/h, on a des stops, des feux, des piétons qui traversent, etc. qui font que la vitesse moyenne est bien inférieure…
    Mais ça les GPS n’en tiennent pas forcément compte et le mien a déjà essayé de me faire passer par Paris centre pour aller de Neuilly à Montgeron ce qui est loin d’être optimal en journée (mais on arrive quand même et c’est pour ça que j’ai pris un GPS : pas pour aller « vite » mais pour « arriver » !!!).

    Répondre
  • En ce qui concerne ton sens de l’orientation… je pense qu’en effet il était indispensable que tu prennes un GPS qui te permette d’arriver à bon port. Je suis désolée, c’est vraiment pas de ma faute…. mais en ce qui concerne les explications précitées… moi j’abonde dans le sens de Caro soit tu as une bonne carte routière et tu t’y tiens, soit tu as un GPS et tu lui fais confiance et point barre… parce que moi, je ne comprends rien du tout aux explications que tu as données et si je dois faire comme tu dis alors là c’est sûr, je ne suis pas arrivée !!! allez bon voyage 🙂

    Répondre
  • De toutes façons les explications données ici ne permettent absoluement pas de s’orienter. Ce n’est pas fait pour !
    Sinon j’ai ajouté une zolie illustration à l’article. Magnifique photo de la terre vue depuis la mission Apollo 17 ! On dit merci à la NASA qui met à la disposition des internautes tout plein de magnifiques images généralement libres de droit (c’est le cas de celle-ci bien entendu)… ceci dit moi je l’ai reprise depuis wikipedia 🙂

    Répondre
  • C’est vrai que la carte michelin ou le site viamichelin.com c’est bien pratique. Déjà parce que le gars qui connaît la latitude et la longitude de son point de départ et de son point d’arrivée, il est drôlement fortiche. Et puis parce que le chemin à vol d’oiseau, c’est loin des routes existantes parfois.
    Seul avantage : pouvoir convaincre son pigeon voyageur favori que pour aller chez bidule, c’est seulement 25 km et que le message est hyper important. C’est là que le pigeon répond : « hé t’as qu’à envoyer un SMS, nan mais !).
    Surtout qu’avec le H5N1, c’est pas bien prudent d’avoir un pigeon chez soi 😀

    Répondre
  • Niquel…
    Ca marche super, j’ai appliqué à la formule en SQL en divisant par 360 et PAF, ça me renvoi tout. PARFAIT !

    Répondre
  • Emy

    et si on a un seul ponit Gps et on veux avoir un autre point distant??? je sais qu a partir d’un seul point on pourait pas avoir les coordonées d’un autre.
    y’a il une solution facil ou un materiel qui pourai me calculer la distance entre les 2 ponit pour pouvoir calculer les coordonnées du point cherché
    reponse please (->)

    Répondre
  • Guillaume

    Si tu as les coordonnées d’un point donné et une fonction qui te permet de calculer une distance tu peux facilement connaitre l’ensemble des points situés à une distance donnée de l’origine. Le résultat de cette équation est un ensemble de points qu’on appelle « cercle » 😉 C’est le même principe que dans un plan orthogonal avec une distance euclidienne sauf que l’équation résultante sera « un poil » plus compliquée.
    Si tu veux obtenir un seul point il te faut non seulement un point d’origine, une distance mais aussi une direction.

    Répondre
  • Herve

    Bonjour,
    J’utilise la formule pour trouver la distance entre 2 points de la terre à l’aide des longitudes et des latitudes.
    Existe t’il une formule me permettant de connaître la plus petite distance entre mon chemin et une ville (Latitude, longitude).
    Cela me permettrait de connaître lorsque je fais la route Nantes Paris que je passe plus prêt du Mans que de Brest.
    Merci d’avance pour votre aide.

    Répondre
  • Tout le problème vient de la notion de « chemin » et de « plus petite distance ». De quelle distance parlons-nous ? Car oui il en existe plusieurs. C’est d’ailleurs le cas ici puisque j’ai donné une formule de distance et qu’il en existe d’autres en fonction des approximations que l’on s’autorise (ou non). Ma formule ne tient d’ailleurs pas compte des obstacles rencontrés style « montagne » ou « lac » !
    Sinon l’algorithme pour savoir si on passe plus près de Brest que du Mans consisterait, pour chaque point du chemin, à calculer la distance d(Pchemin,Pbrest) et d(Pchemin,PMans). On mémorise à chaque calcul le minimum pour ces deux distances. En fin de parcours du chemin on compare les deux minimas. Le plus petit des deux minimas donne la ville par laquelle on est passé « au plus près ».
    Bon ça c’est une méthode empirique. Avec les caractéristiques du chemin (décrit sous forme vectorielle) on doit pouvoir faire des projections des points Brest / Mans sur le chemin et ainsi éviter tous les calculs… Mais ça ne reste valable que pour un chemin donné.
    PS : bien entendu je parle en distance… « plus court chemin » étant différent de « plus rapide chemin » :mrgreen:

    Répondre
  • Tigerfou

    Bonjour,
    J’aimerai réagir au tout premier commentaire, c.a.d. celui d’Olivier :
    Je cite : « C’est la distance la plus courte que tu as retenue, je vois… Ah que c’est bon de ressortir la formule de la loxodromie »
    La plus courte distance entre deux points sur la sphère est l’orthodromie et non la loxodromie.
    La loxodromie est le chemin qui coupe les méridiens avec un angle constant. Ce n’est pas la plus courte distance sur la sphère mais sur la carte de Mercator ! Elle est facile à tracer à la règle et permet de conserver un cap constant à la navigation, ce qui la rend très pratique pour les marins.
    La loxodromie est simple à calculer pour deux points de même latitude, et égale à l’orthodromie pour deux points d’un même méridien, mais elle est en revanche plus compliquée à calculer pour deux points quelconques car sa démonstration met en jeu un calcul d’intégrale. Il existe néanmoins des formules qui en donnent une valeur approchée.
    A noter que la loxodromie n’est pourtant pas une distance au sens mathématique du terme…
    Pour plus d’infos je conseille le site de Gilles Hainry :
    http://www.univ-lemans.fr/~hainry/articles/loxonavi.html
    Amicalement

    Répondre
  • Michel

    Peut-on faire le processus inverse; calculer les coordonnées de tous les points à proximité (à 100 mètres par exemple) d’un point dont on connaît les coordonnées??

    Répondre
  • Tous les points à distance = constante, c’est l’équation d’un cercle. Il suffit donc de résoudre l’équation d = R et on a l’ensemble des points de ce cercle.
    Ceci dit si avec une distance classique c’est relativement simple à faire (X² + Y² = R² si on prends O comme origine… sinon il suffit d’appliquer une translation) dans le cas présent et vu la formule de notre distance ça risque d’être un poil plus complexe à trouver !

    Répondre
  • Cadeau de considération symbolique (50 euro) pour celui ou celle qui me trouve la solution pratique:
    je veut fabriquer une enveloppe sous forme de sphère (en nylon)12 m³ cube de volume. Comment faire pour reproduire – sur le nylon – l’aire (surface) entre deux méridiens sachant que mon ballon est formé de 24 surface entre méridienne ?
    Rappel :
    L’équation de sphère : http://homeomath.imingo.net/sphere4.htm
    Volume de sphère : S = 4/3 ? R³ (Rayon)
    Aire : A = 4 ? R²
    Périmètre (cercle) : p = 2 ? R
    Merci pour l’effort et le temps que vous consacrez a mon problème. Denis

    Répondre
  • thomas

    explique toi un peu mieux denis, on comprend rien

    Répondre
  • Salut à tous!
    Merci pour la fonction, ça m’a permis de finir ma classe objet C++.
    Elle est disponible là : http://code.google.com/p/clocate/
    En gros elle permet de gérer des points GPS ou XYZ et de faire des conversions et calculs de distances entre eux.
    Tout ça pour une IA de type pathfinding basée sur A*… bref testez la si ça vous chante et dites-moi ce qu’il faudrai améliorer.
    A+

    Répondre
  • constantin

    Avec ta formule, connaissant la position actuelle d’un objet et sa vitesse moyenne ainsi que la direction dans laquelle se déplace l’objet, comment trouver la position GPS de l’objet après un temps T ?

    Répondre
  • ZeGuigui

    @constantin: connaissant la position, la vitesse et la direction la formule de distance n’intervient nul part pour calculer le point destination.

    Répondre
  • Merci pour cette formule très utile et bien exposée.
    ça m’a été d’un grand secours !

    Répondre

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.