gpx titre     Route, trace, waypoint et fichier GPX. Les GPS et les logiciels de cartographie dans certains menus, utilisent des fichiers souvent en .GPX pour désigner des routes, des traces ou des waypoints. Il s’agit d’un format d’échange normalisé. Bien sûr il y a des formats propriétaires pour certains GPS mais il y a toujours des outils de traduction vers ce format d'échange. Voir par exemple sur ce site GPS Visualizer un traducteur polyvalent ou GPSBabel en application à installer. Les formats .KML ou .KMZ qu'utilisent Google sont aussi très fréquents.

     Les fichiers GPX, qu’ils décrivent un waypoint, une route ou une trace sont de simples fichiers en XML lisibles avec un simple éditeur de texte (Bloc note). J’utilise personnellement Notepad++ qui numérote les lignes et possède beaucoup de fonction de recherche. Je conseille aussi de charger pour Notepad l'extension XML Tools, qui permet de vérifier la validité d'un fichier au format XML.

    Je me propose ici de faire une petite présentation pour tous ceux qui ont un GPS dans un smartphone par exemple et qui ne savent pas encore exploiter les fichier GPX.

    Voici un excellent tutoriel en français sur le langage XML de Guillaume Richard

 

    Quelques précisions pour commencer.

         Un waypoint est un point géoréférencé qui est décrit par ses coordonnées géographiques : Latitude et longitude en degré décimal et Datum WGS84.

         Il possible aussi de compléter cette information par des infos supplémentaires (des métadonnées) du genre nom, altitudes, symbole de représentation, couleur etc…

         Une route est une liste de waypoints ordonnancée depuis un lieu départ vers un lieu d’arrivée. Le GPS nous aidera à aller d’un waypoint à un autre en nous communiquant le cap (l’azimut) et la distance pour aller au prochain, en suivant un segment de droite. Ici aussi des métadonnées peuvent venir compléter les informations de bases.

         La Trace elle est très semblable à la Route. Elle est souvent le résultat d’un enregistrement d’un GPS au cours d’un déplacement. Le GPS est programmé pour enregistrer une position (un waypoint) toutes les minutes par exemple ou tous les 250m parcourus. Souvent des métadonnées sont enregistrées en même temps que les waypoints. Exemple vitesse mesurée, altitudes mesurées ou calculées, précision de la localisation fréquence cardiaque … tout est alors fonction des caractéristiques de l’appareil de mesure et de sa programmation. Bien sur ensuite elle peut permettre de refaire le même chemin. Elle peut aussi permettre de refaire le chemin en sens inverse si on s’est perdu.

    Une précision importante : ce ne sont pas les satellites qui nous localisent mais le GPS qui se localise grâce aux signaux émis par les constellations de satellites GPS. Il n’y a pas un signal montant du GPS vers le satellite, mais uniquement des signaux descendants depuis les satellites. Ensuite en fonction du logiciel utilisé il faudra une connexion Internet pour avoir la position actuelle sur une carte géographique, ou une carte téléchargée par avance et géoréférencée pour ne pas être tributaire d’une connexion internet aléatoire en montagne ou en forêt et horriblement chère à l’étranger (et en France Fâché!).

    Il existe aussi des outils dans les Smartphones qui permettent de partager sa position en temps réel avec ses proches ou plus désagréablement avec son patron. Il faudra alors soit une connexion internet, ou un outil envoyant sur un serveur des SMS répétitifs contenant la géolocalisation du mobile à l’instant t.

    Structure des fichiers GPX

    Comme nous l’avons vu les fichiers GPX sont des fichiers XML qui se traitent comme des fichiers textes et avec les mêmes outils. Il est donc facile de les lire, de les comprendre ou de les modifier.

    Les waypoints

    Voyons le fichier chiroulet_waypoint.gpx relatif à un waypoint. Ouvrons-le avec notre éditeur de texte

1       <?xml version="1.0" encoding="ISO-8859-1"?>

2       <gpx version="1.1">

3       <wpt lat="42.9622504872" lon="0.0906430360">

4       </wpt>

5       </gpx>

    Le Langage XML est un langage à Balise comme le HTML. Les données sont en général encadrées par une balise ouvrante <balise> et une balise fermante </balise>. Il fonctionne comme des poupées russes. On considérera une balise ouvrante et sa balise fermante correspondante comme une poupée. Elle est contenue complètement dans une autre poupée, et peut contenir tout un ensemble de poupée. Une poupée ne peut pas être dedans et dehors d'une même poupée. La différence avec cette image est qu'une poupée peut contenir plusieurs poupées.

        Exemple possible :

<balise1>

     <Balise2>

     </Balise2>

     <Balise3>

          <Balise4>

          </Balise4>

     </Balise3>

</Balise1>

   Balise 4 contenue dans Balise3; Balise 3 et Balise 2 contenue dans Balise1

        Ce qui est impossible :

<Balise1>

<Balise2>

</Balise1>

</Balise2>

          Ici c'est faux car la balise 2 ne peut pas être dedans et dehors de la balise 1!

          Reprenons notre waypoint :

1       <?xml version="1.0" encoding="ISO-8859-1"?>

2       <gpx version="1.1">

3       <wpt lat="42.9622504872" lon="0.0906430360">

4       </wpt>

5       </gpx>

     Je ne vais pas rentrer dans le détail mais je vais expliquer simplement ligne par ligne.

Ligne 1 : mode de codage : nous avons un fichier xml en version 1.0 et nous encodons le texte en ISO-8859-1. Cette ligne est systématique. C'est un cas particulier, il n'y a pas de balise fermante.

La ligne 2 est associée avec la 5 eme . gpx version= ‘’1.1’’ veut dire que nous utiliserons la norme 1.1 qui précise le mode d’encodage du fichier GPX voir la documentation de la norme ici.  Les lignes 2 et 5 sont aussi toujours présentes. Ligne 2 balise ouvrante, ligne 5 balise fermante

La ligne 3 ouvre la balise <wpt (waypoint) et la 4 la ferme avec </wpt>. En 3 on trouve les 2 paramètres latitude et longitude en degrés décimaux datum WGS84.

    Il est possible de rajouter des métadonnées, exemple le nom et l’altitude et de compléter ainsi le fichier chiroulet_waypoint.gpx

<?xml version="1.0" encoding="ISO-8859-1"?>

<gpx version="1.1">

<wpt lat="42.9622504872" lon="0.0906430360">

<name> Chiroulet</name>

<ele>1074 </ele>

</wpt>

</gpx>

    On remarquera que les balises <name>  et <ele> sont sur la même ligne que leur balise fermante. Pour autant on remarquera que la règle de mise en place des balises vue plus haut fonctionne. Le nom des balises décrivant les métadonnées est normé voir le lien suivant

    En allant sur le site internet GPSVisualizer  si on sélectionne dans « Upload your GPS data file here » le fichier "chiroulet_waypoint.gpx" et que nous validions en cliquant sur « Draw the map » nous visualisons notre waypoint sur un fond de carte Google. Il est possible de changer la couleur du point et l’icône entre autres.

gpsvisualizer draw a map

Fenêtre de « GPSVisualizer draw a map »

chiroulet waypoint

Le waypoint sur un fond google hybride

    Les routes

    J’ai créé pour mes explications avec le site Mapometer une route d’environ 1 km au départ du Chiroulet, le fichier chiroulet route.gpx disponible ici.

    Il est constitué de 8 waypoints

<?xml version="1.0" encoding="UTF-8"?>

<gpx

version="1.1"

creator="GPSBabel - http://www.gpsbabel.org"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://www.topografix.com/GPX/1/1"

xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<metadata>

<time>2013-03-15T17:36:32Z</time>

<bounds minlat="42.960882000" minlon="0.089178000" maxlat="42.968482000" maxlon="0.101709000"/>

</metadata>

<rte>

<rtept lat="42.961573000" lon="0.089178000">

   <name>RPT001</name>

</rtept>

<rtept lat="42.960882000" lon="0.090551000">

   <name>RPT002</name>

</rtept>

<rtept lat="42.961259000" lon="0.092182000">

   <name>RPT003</name>

</rtept>

<rtept lat="42.962704000" lon="0.093985000">

   <name>RPT004</name>

</rtept>

<rtept lat="42.963646000" lon="0.096216000">

   <name>RPT005</name>

</rtept>

<rtept lat="42.965279000" lon="0.098019000">

   <name>RPT006</name>

</rtept>

<rtept lat="42.965970000" lon="0.099821000">

   <name>RPT007</name>

</rtept>

<rtept lat="42.968482000" lon="0.101709000">

   <name>RPT008</name>

</rtept>

</rte>

</gpx>

    En jaune on retrouve les balises définissant le codage et en rose des paramètres complètement optionnels décrivant l’environnement de création de la route.

    En vert il y a les balises encadrant les métadonnées. Mapometer a inséré la donnée <time> pour préciser le moment de la création de la route et une balise <bounds> qui donne les 4 coordonnées maximales encadrant la route (2 latitudes et 2 longitudes). Nous l’avons vu les métadonnées sont optionnelles

    En bleu nous avons les balises <rte> qui encadrent les 8 waypoints. Chaque point est décrit entre des balises <rtept> en rouge. Chaque point est complété par son numéro d’ordre encadré de balise <name>

    Il est possible de visualiser dans GpsVisualizer la route de la même façon qu’avec le waypoint. La métadonnée <bounds> permet un bon centrage et un niveau de zoom en relation à la longueur de la trace.

chiroulet route

La route avec les 8 waypoints

    La trace

    J’ai créé toujours avec Mapometer le fichier trace correspondant à la route précédente. Ici : chiroulet_trace.gpx.

<?xml version="1.0" encoding="UTF-8"?>

<gpx

version="1.1"

creator="GPSBabel - http://www.gpsbabel.org"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://www.topografix.com/GPX/1/1"

xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<metadata>

<time>2013-03-15T17:37:16Z</time>

<bounds minlat="42.960882000" minlon="0.089178000" maxlat="42.968482000" maxlon="0.101709000"/>

</metadata>

<trk>

<trkseg>

<trkpt lat="42.961573000" lon="0.089178000">

<time>2013-03-15T17:37:16Z</time>

</trkpt>

<trkpt lat="42.960882000" lon="0.090551000">

<time>2013-03-15T17:38:04.830Z</time>

</trkpt>

<trkpt lat="42.961259000" lon="0.092182000">

<time>2013-03-15T17:38:54.950Z</time>

</trkpt>

<trkpt lat="42.962704000" lon="0.093985000">

<time>2013-03-15T17:40:13.300Z</time>

</trkpt>

<trkpt lat="42.963646000" lon="0.096216000">

<time>2013-03-15T17:41:28.770Z</time>

</trkpt>

<trkpt lat="42.965279000" lon="0.098019000">

<time>2013-03-15T17:42:52.840Z</time>

</trkpt>

<trkpt lat="42.965970000" lon="0.099821000">

<time>2013-03-15T17:43:52.450Z</time>

</trkpt>

<trkpt lat="42.968482000" lon="0.101709000">

<time>2013-03-15T17:45:47.240Z</time>

</trkpt>

</trkseg>

</trk>

</gpx>

    En Jaune on reconnait les mêmes données que pour la route avec les mêmes métadonnées. Ensuite en bleu les balises <trk> (vient de track) remplace la balise <rte>, les balises <trkpt> en vert correspondent aux balises <rtept>.

    Nous remarquons un niveau de balise sans correspondance dans le fichier d’une route : les balises <trkseg>. Au début de mes explications, dans les définitions, je disais que les fichiers traces sont générés souvent par un équipement GPS qui mémorise le parcours que nous faisons en enregistrant un waypoint selon un intervalle de temps que nous pouvons paramétrer.

     Plus ce temps est cours plus la trace sera précise, mais le fichier GPX sera gros. L’appareil peut être arrêté ou se mettre en veille et ne plus faire d’enregistrement pendant un certain temps : chaque séquence sera encadrée par une balise <trkseg>.

     Dans notre cas le site Mapometer à inséré la balise « time » qui permettra à des logiciels de traitement de calculer la vitesse moyenne entre 2 waypoints. Un GPS aurait pu ajouter une balise « ele » pour faire apparaitre l’altitude de chaque waypoint. Il aurait alors été possible de représenter le profil du parcours.

chiroulet trace

La trace. Elle apparaît sans les waypoints

 

    Modifier un fichier GPX

    Il est parfois nécessaire d'enlever dans un fichier GPX certaines valeurs de balise afin de le simplifier et de le rendre compatible avec plusieurs applications

    Par exemple:

    Nous avons le fichier suivant:

</trkpt>
<trkpt lat="43.228869" lon="-0.009229">
<ele>324.072</ele>
</trkpt>
<trkpt lat="43.229002" lon="-0.011562">
<ele>324.593</ele>
</trkpt>
<trkpt lat="43.229935" lon="-0.014717">
<ele>322.986</ele>
</trkpt>

 

    Imaginons que nous souhaitons enlever les balises <ele> et leur contenu. Souvent ce sont les balises <time> qui nous gênent

Avec Notepad++ c'est très facile.

  1. Ouvrir votre fichier XML dans Notepad++ :

    • Lancez Notepad++.
    • Ouvrez le fichier XML que vous souhaitez modifier (par exemple, exemple.gpx).
  2. Ouvrir la boîte de dialogue de recherche et remplacement :

    • Allez dans le menu "Rechercher" et sélectionnez "Remplacer"
  3. Configurer la recherche et le remplacement avec des expressions régulières :

    • Dans la boîte de dialogue qui apparaît, assurez-vous d'être dans l'onglet Replace.
    • Cochez la case "Expression régulière" en bas de la boîte de dialogue.
  4. Entrer les expressions régulières :

    •  <ele>.*?</ele> dans la zone "Recherche"
    • Ne rien mettre dans la zone "Remplacer" par

   Nous obtenons alors le fichier suivant:

</trkpt>
<trkpt lat="43.228869" lon="-0.009229">


</trkpt>
<trkpt lat="43.229002" lon="-0.011562">


</trkpt>
<trkpt lat="43.229935" lon="-0.014717">



</trkpt>

 

    Si il y a d'autres données à supprimer on refait l'a même opération avec les autres balises à supprimer.

    On remarque que l'opération génère des lignes vides qui ne sont pas gênantes mais alourdissent la lecture du fichier.

    On recommence avec le menu remplacer de Notepad++ en ayant toujours "Expression régulière" cochée. Cette fois ci dans le chant de recherche on écrit ^\s*$\r?\n . Laisser toujours la zone "Remplacer par" vide.

    Notre fichier est maintenant tout propre !

</trkpt>
<trkpt lat="43.228869" lon="-0.009229">
</trkpt>
<trkpt lat="43.229002" lon="-0.011562">
</trkpt>
<trkpt lat="43.229935" lon="-0.014717">
</trkpt>

    Une remarque parfois en ligne 1 on a une ligne commençant par <? et finissant par ?>

    Elle gêne parfois l'intégration de la trace dans certains logiciels. Ne pas hésiter à la supprimer.

    Idem la Ligne 2 <gpx doit au moins etre de cette forme: <gpx version= "x.x"> Le reste n'est pas obligatoire. Si vous simplifiez cette ligne penser à bien fermer la balise avec le signe >

    Conclusion

    Rien de compliqué !

     Nous avons à faire à des petits fichiers textes qu’il est possible de lire, de modifier. Il est facile d’ajouter 2 traces les unes derrières les autres pour en faire un seul fichier par exemple. Nous verrons que des petits logiciels bien pratiques permettent de faire tout cela, ainsi que visualiser les parcours. D’autres en fonction de la direction, du poids, calculerons le nombre de calories brulées durant le trajet.Nous pourrons par exemple ajouter automatiquement les données d'altitudes.