IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

distance entre deux ville à partir de longitude/latitude


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 750
    Points : 356
    Points
    356
    Par défaut distance entre deux ville à partir de longitude/latitude
    salut,
    soit deux villes dont la position est identifiée par la longitude (long) et la latitude (lat)
    étant données deux villes v1(long1, lat1) et v2(long2, lat2), comment je peux trouver la distance (en km) entre ces deux villes ?
    '...parfois l'informatique peut vous rendre fou...'

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    j'aurai tendance à le faire par étapes :

    - la latitude d'abord : tu calcules la différence d'angle entre le point de départ et le point d'arrivée, puis tu calcules la longueur de l'arc correspondant à cet angle (on va supposer que la terre est ronde et fait 40 000 km de circonférence)

    - la longitude ensuite :pareil que pour la latitude.

    te reste plus qu'à faire un pytagore bête et méchant pour obtenir la distance à vol d'oiseau entre les deux

    PS : ça ne restera qu'approximatin, selon la finesse de ton périmettre de base, et sachant que la terre n'est pas sphérique mais un patatoïde géant
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    En farfouillant sur le net, je suis tombé là-dessus :

    http://mathforum.org/library/drmath/view/54680.html
    http://mathforum.org/library/drmath/view/51711.html

    il semblerait donc que ma solution soit un poil simpliste
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  4. #4
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    C'est cadeau (à vérifier quand meme):

    http://fr.wikipedia.org/wiki/Distance_du_grand_cercle
    Si tu ne te plantes pas, comment veux tu pousser?

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    un p'tit bout de code Delphi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    {!- GEO_DISTPP, GEO_DISTPPN, GEO_DISTPPR ----
     these functions provide distance between two Points
     
     function GEO_DISTPPR(P1,P2:double):single;
     function GEO_DISTPPR(P1,P2:double):single;
     
     input    P1,P2    <double>  coordinates of points
               P1 and P2 are passed as double, but this "double" is built 
               from 2 singles representing latitude and longitude in radians.
     result            <smalint> distance in NM for DISTPP
                       <single>  distance in NM for DISTPPN
                       <single>  "distance" in radians for DISTPPR
    }
    function GEO_DISTPPR(P1,P2:double):single;
    {!}
    var
      XX,YY : extended ;
      _P1   : geo_llrec absolute P1 ;
      _P2   : geo_llrec absolute P2 ;
    begin
    // P1 and P2 are passed as double, but this "double" is built from 2 singles representing latitude and longitude in radians.
    if P1=P2
       then result:=0
       else begin
        try
        XX :=    cos(_P1.lat)*cos(_P2.lat)*cos(_P1.lon-_P2.lon)
              +  sin(_P1.lat)*sin(_P2.lat) ;
        YY:=arccos(XX) ;
        if XX>0
           then result:=YY
           else result:=YY+XPI ;
        if result>XPI then result:=result-XPI ;
        except
         showmessage('Internal error in GEO_DistPPR');
         end;
        end;
    end ; (*GEO_DISTPPR*)
     
    {!}
    function GEO_DISTPPN(P1,P2:double):single ;
    {!}
    begin
    GEO_DISTPPN:=GEO_DISTPPR(P1,P2) * minparrad ;
    end ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Et au cas où la fonction arccos à partir de arctan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ARCCOS(A:extended) : extended ;
    begin
    result:=arctan2(sqrt(1-(A*A)),A);
    end ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Sans perte de généralité on peut supposer que la sphère est de rayon 1 et qu'un des deux points, disons A, a pour latitude 0 et pour longitude 0.
    la sphère est centrée sur le repère orthonormé O,i,j,k, le point A est l'extremité du vecteur i, le point B a des coordonnées polaires alpha beta.
    Tout revient à mesurer la longueur du grand arc AB (on sait que ce sont les géodésiques de la sphère)
    On calcule alors les coordonnées cartésiennes du vecteur OB (passage des polaires en cartésiennes), puis ensuite le produit vectoriel (OA, OB) dont le module est au signe près le sinus de l'angle des deux vecteurs qui sont unitaires.
    La fonction Arcsin nous donne alors l'angle des deux vecteurs, et c'est aussi la mesure en radians de l'arc de grand cercle AB qui a pour rayon 1.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  8. #8
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 750
    Points : 356
    Points
    356
    Par défaut
    merci pour tous
    j'ai trouvé une fonction en Javascript que j'ai transformé en PHP :
    http://www.developpez.net/forums/sho...d.php?t=272814
    '...parfois l'informatique peut vous rendre fou...'

  9. #9
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Pourquoi ne pas appliquer ceci:
    2pi*rayon/360*(a1+a2) - 2pi*rayon/360*a1
    ?
    Nom : sphere.jpg
Affichages : 3525
Taille : 100,3 Ko
    Ceci se limitant donc à une représentation en deux dimensions, à adapter!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Distance entre deux villes.
    Par HaDeSs dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/07/2012, 19h51
  2. Trouver distance/ itinéraire entre deux villes
    Par melles dans le forum Web & réseau
    Réponses: 6
    Dernier message: 09/03/2009, 18h22
  3. Distance entre deux villes
    Par mister3957 dans le forum Services
    Réponses: 3
    Dernier message: 13/09/2007, 10h05
  4. calcul distance entre deux villes
    Par alexfrei04 dans le forum Access
    Réponses: 2
    Dernier message: 08/01/2007, 21h49
  5. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo