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

C# Discussion :

Calcul distance entre 2 coordonnee gps


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 15
    Points
    15
    Par défaut Calcul distance entre 2 coordonnee gps
    Bonjour,

    Travaillant sur un projet de car2x je moccupe de la partie rendu simulation 3D sous unity. je developpe donc mes scripts en C#

    je doit calculer la distance en metre kilometre peu importe entre une coordonnee fixe et la coordonnee calculée en temps reel du deplacement de ma voiture.

    Pas de problème pour recupérer les coordonnées dynamiques ni de soucis pour comprendre comment calculer la distance avec pythagore.
    La formule Originale est la suivante (merci pythagore lol):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sqrt((Lat1-lat2)²+(long1-long2)²)
    donc ma formule en c# est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double dist = Math.Sqrt(Mathf.Pow((float)dynLat- (float)fixLat,2) + Mathf.Pow((float)dynLon- (float)fixLon,2)) * 100000
    le *100000 me permet davoir un resultat lisible en mètres.
    Dans mon cas, calculer une distance orthodromique m´est pas utile pour ce que je fait sur unity.
    Jarrive à calculer une distance. mais le hic est, quand je veut verifier le resultat obtenu avec des calculateurs sur internet je n´obtiens pas le même resultat:

    Voici les coordonnées utilisées
    Lat 1 :48.73021 || Lat 2:48.72473
    Long 1:9.34456 || Long 2:9.36872
    resultat de mon script: 2477 m
    resultat testé sur ce site : 1872 m
    resultat testé sur cet autre site : 1872 m

    Alors je voudrais savoir pourquoi jai une telle difference? dois-je utiliser plus de décimales ??

    Si quelqu´un a une petite idée pour m´éclaircir sa serai surper cool

    PS: désolé si il y a des fautes d´accents mais j´écris avec un clavier allemand lol, donc pas évident.

    merci d´avance de vos réponses.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Effectivement il n'est pas évident d'avoir toujours le même résultat. Dans un projet, j'ai utilisé cette implémentation :
    Code C# : 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
    static double DistanceTo(double lat1, double lon1, double lat2, double lon2, string unit)
    {
        var rlat1 = Math.PI * lat1/180;
        var rlat2 = Math.PI * lat2/180;
        var rlon1 = Math.PI * lon1/180;
        var rlon2 = Math.PI * lon2/180;
     
        var theta = lon1-lon2;
        var rtheta = Math.PI * theta/180;
     
        var dist = Math.Sin(rlat1) * Math.Sin(rlat2) + Math.Cos(rlat1) * Math.Cos(rlat2) * Math.Cos(rtheta);
        dist = Math.Acos(dist);
        dist = dist * 180/Math.PI;
        dist = dist * 60 * 1.1515;
     
        if (unit=="K") { dist = dist * 1.609344; }
        if (unit == "M") { dist = dist * 1.609344 * 1000; }
        if (unit == "N") { dist = dist * 0.8684; }
        return dist;
    }
    Dans ton cas ça me donne 1873.8539499602443.
    Si j'essaie dans SQL Server 2008 R2 avec cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT geography::Point(48.73021, 9.34456, 4326).STDistance(geography::Point(48.72473, 9.36872, 4326))
    Le résultat est 1879.02022653611.

    La vérité doit donc se trouver quelque part entre 1872 et 1880, ce qui au final ne nous donne qu'un écart de 8 mètres au maximum... De quel niveau de précision as-tu besoin ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Cette marge est vraiment trop car je doit suivre un tracé de route.

    Donc le resultat de mon script n´est vraiment pas precis lol car jai 600 mètres de différence:

    ta solution fait la meme chose mais utilise des outils de calcul geometrique, mais je trouve pour calculer une simple distance que ca fait un peut beaucoup pour le peut que j´ai besoin, mais je pense que ta solution peut etre plus precise sur des courte distances.
    ce que j´ai du mal a comprendre c´est comment je peut avec autant de difference avec un simple calcul d´hypotenus mis a par limprecision de la racine carée et peut etre pas assez de décimales apres la virgule

    ps: j´ai corrigé les fautes.desolé, avec ce clavier c´est gonflant lol

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    question con (mais je me suis déjà fait piéger), tes latitude et longitude sont exprimées dans les mêmes valeurs quand tu compare les calculs ? (degrés décimaux vs degrés/minutes/secondes)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  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
    On peut approximer une distance orthodromique par une formule de pythagore, mais il faut la corriger en fonction de la latitude :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DeltaLat=Lat1-Lat2 ;
    DeltaLon=Lon1-Lon2 ;
    CenterLat=(Lat1+Lat2)/2 ;
    CenterLatEnRadians=CenterLat * .... ; // suivant l'unité dans laquelle sont les Lat/Lon
    Distance=Sqrt( DeltaLat² + (Cosinus(CenterLatEnRadian)*DeltaLon)² )
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Ok je vais essayer cela Graffito.

    Sinon pour rrepondre a sevyc64, oui jai les meme types de coordonnees.

    Question con lol:
    mes coordonnes viennent de google map aui prend en compte je pense l´orthodromie. ensuite ses coordonnees sont exploitees dans un jeux aui ne prend pas en compte cette notion (just un élément plan au final)

    donc graphiquement quand on regarde c´est la même chose mais niveau calcul je suis pas sur que le resultat soit le même car ayant fait le calcul a la main avec ma formule je tombe sur le même resultat éroné alors que en testant sur des sites je tombe sur le resultat juste. cela veut dire que je prend pas bien en compte une notion. mais je suis vraiment pas sur

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    probleme solved grâce à votre aide

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Peux-tu indiquer quelle a été la solution à ton problème ? Ca pourra peut-être aider quelqu'un d'autre.

    Pour marquer le post comment résolu, il faut utiliser le bouton en bas de la page
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Excusez-moi lol.

    Donc j´ai resolu mon soucis grace a la solution de vous DotNetMatt.
    comme je l´avais predit, des coordonnees recupérer sur google map sont calculees aussi en fonction de l´orthodromie. Et donc sur ma carte unity ne prennant pas en compte ce parametre pour mes calcul, cela me provoquais l´imprecision en utilisant le simple calcul de l´hypothenuse avec pythagore.

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

Discussions similaires

  1. Distance entre deux positions GPS/NETWORK
    Par bza88 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 30/06/2013, 12h54
  2. Calcul distance entre deux coordonnées GPS
    Par hamdouch89 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 03/05/2012, 15h14
  3. [Google Maps] direction entre deux coordonnees GPS
    Par dumoulex dans le forum APIs Google
    Réponses: 2
    Dernier message: 29/11/2011, 08h56
  4. Calcule distance entre 2 points
    Par abir001 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 08/04/2010, 11h12
  5. calcul distance entre deux villes
    Par alexfrei04 dans le forum Access
    Réponses: 2
    Dernier message: 08/01/2007, 21h49

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