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

Macros et VBA Excel Discussion :

Comparaison des coordonnées Gps sur 2 tableaux Excel avec des coordonnées légèrement différentes [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Par défaut Comparaison des coordonnées Gps sur 2 tableaux Excel avec des coordonnées légèrement différentes
    Bonjour,
    J'aimerai si possible faire une macro qui récupère les coordonnées GPS d'un tableau Excel, et, qui compare la latitude et la longitude avec une marge d'erreur suffisante pour trouver la correspondance mais pas trop.

    Par exemple la latitude 46,8956 et la longitude 5,6985 pourrait être dans l'autre tableau 46,456 et 5,875.
    Ceci afin de marquer en entrant dans le premier tableau les informations du deuxième tableau et bi-réciprolattérallement ou vice-versa si vous préférez.

    On peut aller jusqu'à laisser le choix des réponses multiples à l'utilisateur mais que dans la mesure ou une réponse proche pour les 2 coordonnées n'est pas trouvée.

    Les 2 tableaux contiennent environ 25000 coordonnées (lignes) chacun il est donc important d'automatiser l'opération en VBA en minimisant l'intervention humaine.

    Les opérations sur les valeurs ne donnent pas de bons résultats ( ex Latitude & Longitude ou Latitude * Longitude ou Latitude + longitude)

    La fonction evaluate ne donne pas de résultats fiables ou du moins pour ce que j'en ai testé. Merci par avance de votre aide.

    Sincères salutations à tous

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à toutes et tous

    Bonjour delattre13


    Je ne comprends pas le but final de ta question. La fourchette que tu donnes est énorme. En supposant que les nombres donnés soient des secondes-décimales, la différence entre lat : 46.8956 et lat : 46.456, nous donne 0.4396 donc plus de 26 secondes (1 seconde=0.00027777777777 degré). Cela représente environ 750m sur une carte.

    J'ai eu ce problème de comparaison. Je me suis arrété, si lat exacte trouvée, à l'écart de + ou -1 seconde maxi pour la long, et je n'ai que 1000 lignes. Pour mon pb cela donne 3 boucles : x+1, x et x-1. x représentant la long recherchée. La lat étant fixe et non y+1, y et y-1.

    Dans ton cas, si tu restes avec les 26 secondes de différence, et dans les 2 sens pour les 2 points (53 boucles par lat et 53 par long et pour chaque point), je n'ose pas faire le temps de calcul pour les 25000 points. A la fin, il restera la décision du choix et peut-être refaire les boucles !!!!

    La question est donc de savoir où tu veux en venir.

    Eric

    PS : j'espère avoir été clair

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Par défaut
    Bonsoir ou bonjour à tous
    en particulier à edelweissericn

    J'aime bien sa façon de calculer les distances car c'est pile poil le problème.

    On a 2 tableaux avec des coordonnées relevées avec des GPS à la volée. D'autres points sont estimés et relevés sur cartes donc effectivement on peut avoir un delta d'1Km pour 1 point mais les coordonnées de 2 vrais points sont en général distant de plus de 2Km.

    Donc il faut comparer les points d'un tableau et voir s'il y a un point voisin dans l'autre tableau et on marque les points dans les 2 tableaux comme étant validé en mettant le code du point du tableau 1 dans le tableau 2 et le code du tableau 2 dans le tableau 1.

    Ce n'est pas très compliqué mais le problème c'est que les coordonnées sont difficiles à trier car quand on prend un point avec une latitude de -5,256° et un longitude de 43,856° si on les manipules en multipliant ou en ajoutant les valeurs, le critère de tri perd de sa pertinence avec un autre point qui aurait comme latitude 43,9013 et une longitude de -5,1895

    Si on tri sur la latitude et ensuite la longitude on peut avoir des points dans l'océan Indien qui suivent des points en Afrique ou en Amérique du Sud du coup ce n'est pas pratique de plus les tableaux ainsi triés sont toujours au mieux décalés de quelques points mais parfois le point correspondant se retrouve 1 millier de points plus loin. Ce qui rend la comparaison fastidieuse.

    Si on fait manuellement l'opération cela donne:
    On prend la latitude du point 1 du tableau 1 on fait une recheche en tronquant la valeur sur 2 décimales dans le tableau 2 en affichant toutes les valeurs ensuite on vérifie visuellement les longitudes on prend les valeurs les plus approchantes et vérifie dans GoogleMap si les points sont bien similaires à environ 1Km près.
    Inutile de dire qu'au bout de 100 points ça fume.
    D'où l'intérêt d'une macro dans Excel même si cette macro ramène plusieurs valeurs voisines avec la latitude et la longitude ce sera toujours plus facile que de tout faire en manuel.

    Salutations à tous

  4. #4
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à toutes et tous
    Bonjour delattre13

    C'est un peu plus clair. Avant d'aller plus loin il faudrait quelques précisions :

    Pour ta phrase :
    ......D'autres points sont estimés et relevés sur cartes donc effectivement on peut avoir un delta d'1Km pour 1 point mais les coordonnées de 2 vrais points sont en général distant de plus de 2Km.

    - Faut il prendre les "vrais points" exclusivement ? ou en priorité ? ou sans distinction
    - Quelle est la distance max pour la comparaison ? cette réponse est capitale pour la suite.


    Pour ta phrase :
    ......Donc il faut comparer les points d'un tableau et voir s'il y a un point voisin dans l'autre tableau et on marque les points dans les 2 tableaux comme étant validé en mettant le code du point du tableau 1 dans le tableau 2 et le code du tableau 2 dans le tableau 1.

    - on marque les points : comment ? on les incorpore dans l'autre tableau ? ce qui nous ferait à la fin les 2 tableaux identiques ?
    - en mettant le code du point : qu'appelles tu le code ? la ligne entière ?


    Les tableaux sont-ils dans le même fichier ? sur la même feuille ?

    Les points GPS sont en deg-min-sec/decim (ou deg/decim ou deg-min/decim) ?

    La lat et la long sont-elles dans 2 colonnes différentes ou dans une seule avec un séparatif type "," ?

    Donc un bout de fichier avec quelques(~50) lignes des 2 tableaux pourrait nous aider.

    Cordialement
    Eric

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Par défaut
    Bonsoir à toutes et tous
    Bonsoir particulièrement à Éric "edelweisseric"

    Les tableaux 1 et 2 ont des références pour chaque point il s'agit d'un code numérique du style 165234 associé aux coordonnées il s'agit d'un code qui s'incrémente quand on ajoute un point dans le tableau 1 et le tableau 2 à le même genre de données mais il vit sa vie de son côté. Ils ont été crées et gérés par des équipes de terrain différentes d'où les différences. Il s'agit de 2 tableaux Excel différents.

    Sauf que maintenant il faut comparer les 2 tableaux et consolider les données en repérant les "doublons" d'un tableau sur l'autre et repérer les points vraiment différents de l'un à l'autre.

    Ce sont ces codes qui servent à valider un point dans les 2 tableaux
    le tableau 1 comporte
    une colonne "Réf Tableau 1" et une colonne "ref Tableau 2"
    et le tableau 2 comporte
    une colonne "Ref Tableau 2" et une colonne "Réf Tableau 1"

    Pour le test des valeurs il faut taper au plus prés de la Latitude et Longitude et s'éloigner jusqu'à + ou - 1,5km si il n'y a pas de point dans cette fourchette on peut considérer qu'il s'agit d'un nouveau point.

    Mais on peut avoir 2 Points différents dans une distance très proche.

    Donc faire varier les coordonnées en ajoutant ou retirant les milliers de degrés, puis les centaines, les dizaines et le unités.
    Par exemple avec 5,8962 en latitude et 6,9532 en Longitude sur le tableau 1 on fait la comparaison avec ces valeurs sur le tableau 2.

    Manuellement, s'il n'y a pas de correspondance on recommence la recherche avec les points tronqués.
    Ce qui donne 5,896 en latitude et 6,953 en Longitude ainsi de suite en s'éloignant progressivement jusqu' à trouver la correspondance par exemple 6,0362 en latitude et 7,0002 en Longitude dans le tableau 2.
    Comme on le voit il ne faut pas hésiter à incrémenter les coordonnées après les avoir diminuer sans résultat.

    Par exemple on peut penser à une boucle qui incrémente la valeur de test avec une comparaison en ajoutant la valeur et dans cette même boucle retirer cette valeur. Et bien sûr dès qu'il y a concordance on sort de cette boucle.
    Tous les points sont en degrés d'angle décimaux.
    Je prépare un tableau exemple avec des coordonnées types et je vous le posterais dès que possible.

    Merci à Éric et bonne nuit à tous.

    Bonsoir ou bonjour à tous
    en particulier à edelweissericn
    Voici le classeur de test dans lequel les 2 tableaux sont regroupés en 1 seul classeur et je n'ai laissé que 500 points par tableaux
    Classeur_Test_GPS.xlsm
    Tant qu'on y est ce serait parfait si en plus on pouvait renseigner automatiquement les informations récupérées dans GoogleMap.
    Il y a dans le module 1 de quoi visualiser ces informations mais il manque le choix des champs et le copier / coller de GoogleMap à Excel.
    Salutations à tous

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Un essai pour débroussailler, on verra ce qu'il faut améliorer.
    Je calcule la distance de tous les points 2 à 2 et je garde la plus petite (si <20).
    Vu le nombre de points je calcule sur le plan pour aller plus vite. Si tu as besoin de plus de précision on peut calculer sur la sphère (n'oublie pas qu'il va y avoir 625000000 calculs).

    Pour l'instant certains points sont retrouvés plusieurs fois. Je ne sais pas si c'est dû à la fabrication des tableaux de tests ou pas.
    Si ça persiste trouve une idée pour le résoudre
    Regarde ce que ça donne et si ça te parait globalement cohérent.

    Contrôle quand même mon calcul de distance, il est tard ;-)

    eric
    Fichiers attachés Fichiers attachés

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Par défaut
    Bonjour Éric,

    Merci pour le bouton rapprocher il est bien fait en tout cas le résultat ne se fait pas attendre.
    Ton code est nickel je vais l'essayer sur les fichiers réels et je te tiens au courant.
    J'ai vu que tu es un fervent disciple de Pythagore ce qui est une bonne aproximation pour le calcul des distances.

    En fait il y a 2 petits problèmes c'est la ligne 1 contient les titres de colonne.
    un On error resume next et ça baigne ce qui permet d'aller jusqu'au bout même si des lignes contiennent des caractères "parasites" comme ' en début de cellule.
    L'autre petit problème c'est les données d'origine sont toutes en format texte mais je vais mettre la virgule à la place du point et les convertir en numérique. En fait ce sont des données au format Anglo-saxon considérées comme du texte sur un PC en Français.

    Reste aussi à récupérer les informations de GoogleMap comme le lieu (Océan Indien par exemple) ou si le point est sur terre le Pays,la Région, le Département, la ville, la route (Ex: Tanzani parc National du Sérenguéti B144) quand ces informations sont disponibles.

    Encore Merci
    Bon dimanche avec les cigales et les doigts de peids en éventail dans l'eau.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    En fait il y a 2 petits problèmes c'est la ligne 1 contient les titres de colonne
    Précise le pb rencontré car je prend les données à partir de la ligne 2

    un On error resume next et ça baigne ce qui permet d'aller jusqu'au bout même si des lignes contiennent des caractères "parasites" comme ' en début de cellule.
    Là aussi précise le pb et donne des exemples de données, il y a peut-être une normalisation des données à faire.
    Ou alors on teste si l'erreur est connue mais on laisse toutes les autres s'afficher pour déboguer.
    C'est normal qu'il y ait une phase de mise au point pour affiner le résultat.
    Mettre la poussière sous le tapis n'est pas une solution.

    L'autre petit problème c'est les données d'origine sont toutes en format texte mais je vais mettre la virgule à la place du point et les convertir en numérique. En fait ce sont des données au format Anglo-saxon considérées comme du texte sur un PC en Français.
    Ca peut être fait par le programme à condition que tu fournisses un fichier avec les données brutes (y compris tous les cas de saisies non standards à traiter en me précisant à coté le cas) et que tu précises quel(s) séparateur décimal système est utilisé.

    eric

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

Discussions similaires

  1. Placer des coordonnées GPS sur une image du monde à plat
    Par DotNET74 dans le forum Windows Phone
    Réponses: 11
    Dernier message: 02/01/2013, 10h48
  2. Réponses: 9
    Dernier message: 20/07/2012, 16h15
  3. placer des coordonnées GPS sur une carte
    Par tomkiki dans le forum Débuter
    Réponses: 7
    Dernier message: 15/01/2011, 17h55
  4. Remontées coordonnées GPS sur serveur
    Par ojalic dans le forum Mobiles
    Réponses: 1
    Dernier message: 25/05/2009, 14h32
  5. Réponses: 1
    Dernier message: 08/10/2008, 15h30

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