Journal Gestion de collection et comparaison de traces GPS

Posté par . Licence CC by-sa
42
25
mar.
2015

Sommaire

Bonjour bonjour !

Je vais vous parler de cartes, de traces GPS et de deux outils que j'ai développé dernièrement et qui sont liés à ces deux sujets. Le premier est un comparateur d'alternatives dans les trajets similaires. Le second est un outil de visualisation d'une collection de traces GPS sur une carte.

Si vous êtes pressés n'hésitez pas à filer en fin de journal pour les liens vers les sites des projets.

Intro

Cartes

J'ai toujours été intéressé par les cartes. Plus jeune, je me demandais comment diable était-il possible de rassembler autant d'informations aussi lisiblement au format papier. Au début je regardais l'atlas routier lors de trajets familiaux puis j'en suis venu aux cartes IGN, plus belles, plus fines, à des échelles bien plus précises et avec tout un tas de points d'intérêts comme les sommets, les lacs, les refuges etc… Le passage à la carte numérique a été un choc. Je me souviens de l'engouement général autour de moi aux débuts de Google Maps et Google Earth (mi 2006 il me semble). Avoir accès à autant d'informations de façon aussi simple et amusante me paraissait très impressionnant. Sur un pays je voulais bien croire que les créateurs des atlas routiers arrivaient à agréger des données de réseaux routiers provenant de tous les départements mais que google arrive à un niveau de détail supérieur sur l'ensemble de la planète m'a bluffé. Bref.

J'ai découvert quelques années après OpenStreetMap et je n'ai pas décroché depuis. Ce modèle de gestion des données, production, organisation, mise à disposition et cette ouverture laissant tellement de place à la création de nouveaux usages pour les cartes numériques… Une vraie révolution ! C'est un vrai plaisir de voir apparaître au fil du temps de nouvelles bibliothèques d'affichage de carte, des outils géniaux tirant partie des données OSM ou produisant une couche supplémentaire d'information. Quelques exemples :

  • OpenCycleMap Carte basée sur OSM concentrée sur les pistes cyclables, chemins de vtt etc…
  • HitchWiki pour voir les bons spots pour faire du stop
  • OSRM pour calculer des chemins
  • MapQuest pour calculer des chemins et rechercher des points d'intérêt

Mais encore des applis smartphone comme le très bon OSMAnd pour voir des cartes de pays entiers offline , des nouveaux éditeurs de cette merveilleuse carte communautaire…

GPS

Le GPS ne m'a pas plu au moment de son apparition aux yeux du grand public. Je trouvais ça techniquement intéressant mais guère plus. Quel intérêt trouvaient les gens à ces boites à la voix débile et saccadée qui échouent à calculer des trajets que je peux très bien élaborer moi même avec une carte sous les yeux ? Et même quand ils sont devenus performants, je n'ai jamais été un fan du routage appliqué au guidage de l'humain qui selon moi est largement capable de le faire lui même. Peut-être parfois moins précisément ou moins rapidement que la machine mais tout de même suffisamment bien pour que je pense qu'il est mauvais de perdre cette capacité. Le GPS symbolisait à ce moment là la raison majeure de la perte de sens de l'orientation autour de moi. Je comprend qu'on veuille une aide au calcul d'un trajet mais les appareils de navigation suppriment tout contexte et donnent les indications au dernier moment si bien que l'automobiliste se trouve en permanence dans l'ignorance de sa position actuelle. Cela crée une dépendance des plus violentes et des plus amusantes quand on observe un GPS-addict conduisant sans son appareil.

Oui mais voila, c'était sans considérer une possibilité offerte par un appareil captant un signal GPS : stocker la première information qu'il en tire : la position ! Mais c'est bien sur. Ça ouvre un champs de possibilités aussi amusantes qu'utiles ! Contribuer à une carte, échanger des trajets, retenir des positions importantes, indiquer sa position par un simple SMS…

Conclusion de l'introduction :

Les cartes papiers me plaisent beaucoup, les rendre numérique a augmenté grandement leurs possibilités. L'apparition d'OpenStreetMap a fait encore plus fort, on dispose désormais de données libres et ouvertes, détachées du moteur de rendu, dans un modèle communautaire avec une base de données de référence mondiale à laquelle l'accès est public (en lecture/écriture !!!). Les appareils GPS orientés "rando" au sens large sont à des prix assez abordables. Dans ce cadre si accueillant je me suis décidé à développer deux outils qui me paraissent manquer au paysage des outils des gestion de traces GPS :

  • GPX Visual Comparison : Un comparateur de traces GPS similaires qui se concentre sur les parties divergentes (les alternatives de trajet) avec une interface web.
  • GPX Pretty Organisation and Display : Une interface web pour visualiser des collections de traces GPS sur une carte synthétique

GPX Visual Comparison

En tant que cyclopédiste pratiquant régulièrement les mêmes trajets (mes tours favoris, les trajets vers chez les amis, les trajets vers le boulot…) pas mal de mes traces GPS sont produites dans le but de les comparer un jour. J'aime bien savoir par exemple si ce nouveau détour qui tue que je viens de découvrir me raccourcit considérablement le trajet. Ou encore si ce même détour m'a fait plus ou moins forcer. Oui oui on ne se rend pas forcément compte de l'impact d'un détour à la fin d'un long trajet. Ce raccourci improvisé en fin de rando était-il vraiment meilleur que le trajet officiel ?

Pour effectuer cette comparaison je n'avais guère que les deux choix suivants :

  • Utiliser un outil générique d'analyse/traitement de trace comme QLandKarteGT ou Viking et faire chauffer ma souris et ma patience pour faire des petites mesures imprécises et fastidieuses entre les alternatives des mes trajets similaires.
  • Trouver un outil spécialisé qui me présente au moins une comparaison globale entre plusieurs traces GPS ou dans l'idéal qui arrive à isoler/détecter des parties divergentes de traces similaires.

J'ai éliminé très vite la première option et j'ai buté sur la deuxième : ça n'existe pas. Le mieux que j'ai trouvé est un outil web qui rejoue simultanément deux traces pour observer laquelle est en avance sur l'autre à chaque instant. J'ai trouvé ça assez loin de ce que je voulais faire.

Bref je l'ai fait et ça n'a pas de nom à part GPX Visual Comparison. Le projet est sous GPL, versionné avec GIT et hébergé chez gitlab.com :

Page d'accueil du projet GPX Visual Comparison

Qu'est ce que ça fait ?

On donne des traces GPS au format GPX à manger à un formulaire pour obtenir une page de résultat. Sur cette page de résultat, on choisit une paire de traces parmi celles qu'on a soumises et un critère de comparaison (pour l'instant "distance", "temps" et "dénivelé positif cumulé") afin que cette paire de trace soit dessinée sur la carte en colorant chaque partie divergente en vert ou en rouge si elle est meilleure ou moins bonne que son alternative selon le critère sélectionné.

Un clic sur une partie d'une trace ouvre une popup donnant plus de détails. Si on clique sur une partie divergente, on a le détail de la comparaison pour cette divergence en particulier, sur les trois critères avec les valeurs associées.

Comment ça marche ?

La comparaison

La comparaison en elle même est effectuée par un script Python qui utilise les bibliothèques gpxpy et python-geojson.

Dans un premier temps, la comparaison de chaque paire de trace est effectuée et stockée. Elle est composée de deux algorithmes de déplacement sur les tracés, findFirstConvergence et findFirstDivergence .
Le premier (findFirstConvergence) part du principe que l'état observé au départ est une divergence et trouve les deux prochains points formant une convergence entre les deux traces.
Le deuxième (findFirstDivergence) part d'un état de convergence donné et trouve les premiers points suivant à partir desquels se forme une divergence.

Une fois qu'on trouve une divergence entre deux traces, on procède à la comparaison sur tous les critères des deux alternatives de cette divergence. On fait cela pour toutes les divergences de toutes les paires de traces. Ensuite on crée un fichier GeoJson par GPX parce qu'il est beaucoup plus facile de lui ajouter des métadonnées ainsi que de le manipuler nativement dans la bibliothèque d'affichage utilisée par la suite.

La comparaison est indépendante du rendu graphique.

L'affichage

L'interface web de cet outil est composée d'une page PHP qui gère la soumission du formulaire et le lancement du script Python de comparaison. Dans cette page se trouve une carte affichée grâce à Leaflet, une bibliothèque bluffante de simplicité et de possibilités. À cette carte sont ajoutés des plugins Leaflet comme une minimap, la recherche de lieu et surtout une sidebar qui contient le formulaire de soumission des traces et les options de comparaison.

Cette page peut aussi être appelée avec des paramètres GET indiquant des URLs pointant vers des fichiers gpx. De ce fait, on peut facilement utiliser GPX Visual Comparison depuis tout autre outil de gestion web de traces GPS.

GPX Pretty Organisation and Display

Après deux ans à me balader et faire joujou avec un smartphone et ensuite un GPS de randonnée j'ai emmagasiné un bon paquet de traces GPS au format GPX. Au début je me satisfaisais bien de regarder ces traces une par une sur mon minuscule écran de smartphone avec un petit graphe d'altitude et la possibilité de naviguer sur une carte OSM ou Gmap. Je me suis rapidement mis à chercher un outil pour faciliter ma gestion de traces.

Etat de lard

Je me souviens avoir beaucoup utilisé les applications MyTracks, OruxMap et OSMAnd. Au bout d'une vingtaine de traces on commence déjà à s'y perdre, je ne me voyais pas continuer comme ça. À ce moment là a commencé une quête infinie d'outil de gestion de collection de traces GPS. J'ai failli adhérer aux services web comme mapmyride, mapmyhike, evertrail mais je déteste les interfaces trop chargées et peu intuitives et la volonté de mettre du social network link partout. J'ai aussi pensé à utagawavtt qui est un site spécialisé dans la trace de VTT (première restriction) et pas du tout orienté gestion de traces mais plutôt construction d'une grosse base de traces bien documentées. Leur carte est super bien faite avec des groupes de marqueurs. Le développeur m'a gentiment expliqué qu'il avait codé à la rache et qu'il ne me filerait pas le code qu'il juge non adaptable à un contexte plus générique. Cette recherche d'outil commençait à devenir longue et assez infructueuse.

J'ai trouvé une première réponse satisfaisante avec GPSies. Ce site est un service (fermé) de gestion des ses traces persos avec la possibilité de les rendre publiques ou privées. À l'ajout d'une trace, tout un tas de champs facultatifs permettent de donner une description assez précise de l'activité pratiquée et du trajet parcouru. Des statistiques et graphes sont générées. Le fait que mes traces se retrouvent chez quelqu'un d'autre ne me plaisait pas du tout mais j'ai accepté cet aspect, bien obligé de constater que je n'avais pas d'alternative…

Un aspect de GPSies qui me plaisait bien est la vue d'ensemble des traces d'un utilisateur. À l'usage c'est très chiant d'y naviguer, la molette de zoome pas, les marqueurs représentant les traces s'empilent ignoblement quand ils sont en grande concentration. Mais mais mais, si on survole un marqueur, la trace correspondante s'affiche temporairement. Presque pratique pour retrouver une trace parmi une trentaine ayant le même point de départ.

Une fois que j'ai démarré le développement de GPX Visual Comparison et que j'ai donc commencé à utiliser Leaflet, j'ai découvert le nombre impressionnant de plugins et forcément je me suis arrêté sur Leaflet.markercluster qui apporte une manière élégante et pratique de dessiner un grand nombre de marqueurs. Nom d'un wetboob ! Je croyais que ça n'existait que dans la carte d'Utagawavtt.

Je n'avais plus d'excuse pour ne pas faire mon petit outil moi même. Il s'appelle GPX Pretty Organisation and Display, est sous GPL, est hébergé sur gitlab.com et versionné avec GIT.

Page d'accueil du projet GPX Pretty Organisation and Display

Qu'est ce que ça fait ?

C'est une interface assez basique qui affiche sur une carte des marqueurs symbolisant les débuts des traces d'une collection. Les marqueurs se regroupent si leur densité est trop forte pour que leur affichage soit lisible. Dans une barre latérale se trouve un formulaire de sélection de dossier à afficher (dossier qui se trouve sur le serveur), quelques options et un tableau contenant la liste des traces visibles actuellement. On peut trier le contenu de ce tableau par colonne. Si on survole une ligne de ce tableau, la trace correspondante s'affiche temporairement sur la carte pour la situer. Si on coche une ligne de ce tableau, la trace est dessinée et la vue de la carte s'adapte pour l'englober. Si on clique sur un marqueur ou sur un dessin de trace, un popup affiche des informations générales sur la trace, un lien de téléchargement, un lien permanent vers la vue de la trace et un lien pour afficher le profil d'altitude de la trace.

Si cela est correctement configuré, on peut lancer la comparaison de plusieurs traces sélectionnées dans le tableau dans une instance de GPX Visual Comparison.

Comment ça marche ?

Les dossiers de la collection doivent se trouver sur le serveur.

À l'affichage d'un dossier de la collection, un script python transforme tous les fichiers GPX en GeoJson et un fichier de marqueurs (en JSon) est généré. Le fichier de marqueurs est récupéré au chargement de la page. Chaque trace est récupérée en AJAX au moment où son affichage est demandé.

Le reste est géré en JS et avec les plugins Leaflet.

Et alors ?

Je regrette qu'il n'existe pas plus d'outils de gestion/traitement de traces GPS, que ce soit en client lourd ou en web, dans le paysage actuel du logiciel libre. J'ai trouvé au mieux des services web fermés et assez limités en fonctionnalités.

Quand j'aurai le temps, j'aimerais initier un développement de gestionnaire web de collection de traces GPS qui possède une gestion d'utilisateurs, de droits, de méta données, qui inclut quelques outils de traitement de traces et surtout qui soit AUTO-HÉBERGEABLE comme les deux projets dont je viens de vous parler. Ça serait une sorte de GPSies mais en mieux et en libre. Ah j'oubliais, il me faudra aussi trouver la motivation de créer un gros outil web sans être passionné par les frameweurks et le design… Ah non je sais, je vais le poster sur LinuxFr et ça va donner des idées à des powerdevs powerrandonneurs !

Et vous, comment gérez-vous vos traces GPS ?

GPX Visual Comparison
GPX Pretty Organisation and Display

  • # Screenshots?

    Posté par . Évalué à 2.

    Ça a l'air alléchant, est-ce que tu pourrais poster des screenshots pour les flemmards ? :)

    • [^] # Re: Screenshots?

      Posté par . Évalué à 2.

      Si tu es flemmard au point de ne pas cliquer sur les liens vers les pages d'accueil des sites des projets, je ne peux plus rien pour toi ;)

      • [^] # Re: Screenshots?

        Posté par . Évalué à 1.

        Rho la honte, j'ai cliqué mais rien vu, comme quoi le café, ça aide :D

  • # Bravo !

    Posté par (page perso) . Évalué à 4.

    GDC et GCD sont des acronymes très proches, mais ça à l'air vraiment sympa. Bravo pour le travail, et merci pour l'ouverture ;)

    Néanmoins, je zieutais les captures d'écran, et sur la dernière capture de GCD, je pense que les données affichées sont incohérentes, puisque 30 km parcourues en 2 jours, ça me semble ne pas cadrer avec la vitesse moyenne de 30 km/h (et encore moins la vitesse maximale de 11 km/h)

    Je me pose la question suivante : soit un trajet que tu fais très souvent, serait-il possible de visualiser la distribution de ce trajet autour de sa moyenne ? De telles données pourrait être utiliser pour affiner certaines routes sur OSM d'ailleurs.

    • [^] # Re: Bravo !

      Posté par . Évalué à 3.

      Avec plaisir !

      GDC et GCD sont des acronymes très proches

      Oui je n'aime pas non plus ni les noms ni les acronymes qui en découlent… Je suis ouvert aux propositions de noms et acronymes récursifs.

      30 km parcourues en 2 jours, ça me semble ne pas cadrer avec la vitesse moyenne de 30 km/h

      C'est sur que ça parait faux. Je m'y penche… Un problème que je rencontre souvent avec les données GPS directement sorties de l'appareil de mesure : Il se peut que le début ou la fin de la trace soient foireux. Parfois on met à zéro l'appareil mais il garde la dernière position connue et crée un point bidon en début de trace avant d'avoir le nouveau signal GPS. A bien y réfléchir, ce n'est pas la raison de cette erreur. Mon calcul est basique. Il ne considère que la distance totale et le temps passé entre le premier et le dernier point. De toute façon ça donne la vitesse moyenne globale et pas la vitesse moyenne de déplacement (que je vais ajouter d'ailleurs). J'ai ! Le problème vient d'une mauvaise utilisation de Timedelta en Python. L'attribut "seconds" est modulo 86400. Une méthode total_seconds() est dispo et plus adaptée.

      Merci à toi pour le rapport de bug !

      et encore moins la vitesse maximale de 11 km/h

      C'est ma vitesse de sprint avec 15 kilos sur le dos ! Je trouve ça plausible :)

      soit un trajet que tu fais très souvent, serait-il possible de visualiser la distribution de ce trajet autour de sa moyenne ?

      Je ne vois pas trop de quel genre de visualisation tu veux parler. Une superposition de toutes les traces avec la moyenne colorée différemment ? Nos appareils de mesure ont une précision assez faible. Je ne suis pas sur qu'on puisse augmenter sensiblement la précision d'OSM.

      • [^] # Re: Bravo !

        Posté par (page perso) . Évalué à 6. Dernière modification le 26/03/15 à 11:43.

        Je ne vois pas trop de quel genre de visualisation tu veux parler. Une superposition de toutes les traces avec la moyenne colorée différemment ? Nos appareils de mesure ont une précision assez faible. Je ne suis pas sur qu'on puisse augmenter sensiblement la précision d'OSM.

        Ce n'est pas vraiment utile. Je me posais simplement la question de savoir si la variation spatiale de chemins identiques suivait une sorte de distribution gaussienne suivant le chemin moyen.

        Pour l'altitude, ça ressemblerait peut-être à ça :

        Variation d'altitude

        Mais je comprends bien que ça ne sert peut-être à rien du tout ;)

        Voici quelques propositions pour de nouveaux noms :

        GRAD — GPX Ressemblance And Disparity
        GOD — GPX Organisation and Display

        • [^] # Re: Bravo !

          Posté par . Évalué à -1.

          Ok je comprends mieux pour ton histoire de distribution. Je suppose que oui ça suit une gaussienne puisque l'erreur a une direction aléatoire due au fait que la position des satellites au moment de la mesure est différente à chaque tracé. Assez large tout de même la gaussienne, je pense.

          Merci pour les propositions de nom ! J'ai bien aimé le OD pour Organisation and Display. Je crois que je vais partir sur :

          GPOD : GPx Organisation and Display
          GPXCOMP : GPX COMParison

  • # Geoportail ?

    Posté par . Évalué à 2.

    Tout ça a l'air bien sympathique. Une question toutefois, à toi qui aimes les cartes, as-tu pensé à utiliser Géoportail pour les fonds ?

    A titre personnel, j'utilise http://www.mygpsfiles.com/app/ pour préparer les traces de mes sorties en VTT et j'avoue être assez attaché à l'affichage sur des cartes au 1:25000.

    Nicolas

    • [^] # Re: Geoportail ?

      Posté par . Évalué à 1.

      Oui j'y ai directement pensé mais il faut s'inscrire pour obtenir un compte Geoportail et une API key. Je n'adhère pas du tout à cette logique. Cela dit il est très facile de localiser la partie des deux outils qui ajoute les tuiles de carte. Il est donc très facile d'ajouter une couche IGN à une instance de GpxPod ou GpxVComp si tu as un compte sur Geoportail.

      J'ai regardé mygpsfiles dans mes longues recherches d'outils. C'est pas mal mais plusieurs choses me repoussent assez fortement :

      • C'est un service fermé, je ne sais pas ce qu'il fait des données qui y passent à travers.
      • Je ne peux pas le déployer chez moi donc le jour où ce service disparait je me retrouverai comme un con.
      • Je ne peux pas récupérer une sous partie du projet pour m'en resservir.
      • Je ne peux pas faire évoluer le service alors qu'il est loin d'être complet.
      • etc…

      Le développeur est seul, je trouve la démarche tellement bête que je n'arrive pas à utiliser ce genre d'outils. Je préfère en développer un libre au moins tu peux ajouter le layer IGN sans me demander la permission ou sans devoir me supplier !

      • [^] # Re: Geoportail ?

        Posté par . Évalué à 1.

        C'est marrant, tes remarques sur mygpsfiles me tarabustent aussi ;-) Du coup, je m'en sers juste en mode préparation de traces, pas en mode gestion d'une collection.

        Geoportail, ça me choque un peu moins. Ce sont des données privatives ; l'IGN les vend aux professionnels ; je comprends quelque part qu'il faut un mécanisme de contrôle. Dans leur qualité, les cartes OSM ne m'ont jamais emballé (peut être par manque d'intérêt et de motivation, certes).

        Je ne peux pas te promettre que je vais regarder l'ajout des couches IGN à ton outil… mais il a l'air suffisamment bien pour que je m'y intéresse.

        Nicolas

        • [^] # Re: Geoportail ?

          Posté par . Évalué à 0.

          J'ai ajouté une couche IGN sur GpxPod et GpxVComp. Par contre il faut que tu aies une API KEY si tu veux l'héberger chez toi, cette KEY ne fonctionne que pour une IP. Il faut donc modifier la variable API_KEY dans gpxpod.js .

          Bonnes balades !

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.