Mise à jour : les versions 2017 et 2016.
Comme chaque été, depuis maintenant 4 ans à lieu le voyage à Nantes. Il s’agit d’un parcours dans la ville ponctuée d’œuvres.
En allant chercher des info sur le site, je tombe rapidement sur le plan. Super un tracé GPS avec des points d’intérêts, le descend, ok un lien pour partager… Et pas de lien pour télécharger le fichier gpx. Bon je désactive uBlock, je recharge la page. Très bien encore plus de liens inutiles pour partager mais toujours pas moyen de récupérer quelque chose d’exploitable une fois que j’aurais quitté mon fauteuil.
Quand même Nantes, ville labellisée french tech, siège de LiberTIC. Je demande tout de même au gestionnaire de la communauté sur twitter, si à tout hasard il n’aurait pas ça dans ses cartons, avec la collaboration de Kheops pour y coller les bons buzzwords :
.@levoyageanantes tu aurais la trace GPS de la ligne verte ?
— sanpi (@sanpi_) 27 Juin 2015
@sanpi_ @levoyageanantes #OpenData? :)
— KheOps (@kheops2713) 27 Juin 2015
Dans l’attente d’une réponse, je commence à fouiller le code du site en m’attendant à tomber directement sur le fichier tant convoité. Et c’est à partir de là que cela devient amusant :)
Le tracé
La page http://www.levoyageanantes.fr/parcours-plan/ se contente d’inclure une iframe vers http://www.levoyageanantes.fr/wp-content/themes/levoyageanantes2015/maps/VANMAP_2015.php dans laquelle on trouve directement les coordonnées du tracé :
// LIGNE VERTE
var ligne_principale_path = [
new google.maps.LatLng(47.215976,-1.542238),
new google.maps.LatLng(47.215779,-1.542538),
new google.maps.LatLng(47.215761,-1.542646),
new google.maps.LatLng(47.215688,-1.543059),
new google.maps.LatLng(47.215874,-1.543509),
new google.maps.LatLng(47.215943,-1.543799),
new google.maps.LatLng(47.215976,-1.544309),
new google.maps.LatLng(47.215910,-1.544850),
new google.maps.LatLng(47.215735,-1.545612),
new google.maps.LatLng(47.215575,-1.545730),
Bon j’ouvre la page wikipédia du format GPX, rien de bien compliqué : il s’agit d’un format XML et les itinéraires sont de la forme1 :
<gpx>
<rte>
<name> xsd:string </name> [0..1] ?
<cmt> xsd:string </cmt> [0..1] ?
<desc> xsd:string </desc> [0..1] ?
<src> xsd:string </src> [0..1] ?
<link> linkType </link> [0..*] ?
<number> xsd:nonNegativeInteger </number> [0..1] ?
<type> xsd:string </type> [0..1] ?
<extensions> extensionsType </extensions> [0..1] ?
<rtept lat="47.644548" lon="-122.326897">
<name>rtename</name>
</rtept>
</rte>
</gpx>
Ce qui, dans mon cas se résume à :
<gpx>
<rte>
<rtept lat="47.644548" lon="-122.326897"></rtept>
</rte>
</gpx>
À l’origine, j’ai fait ceci dans (neo)vim avec une simple regex, mais pour plus de clarté (je ne suis pas sûr que ce soit l’adjectif approprié), voici la version bash :
wget -q http://www.levoyageanantes.fr/wp-content/themes/levoyageanantes2015/maps/VANMAP_2015.php -O - \
| tail -306 \
| head -177 \
| sed 's/new google.maps.LatLng(\([^,]*\),\([^)]*\)),\?/<rtept lat="\1" lon="\2"><\/rtept>/g'
Et voilà, nous avons déjà notre trace GPS.
Les points d’intérêts
N’ayant toujours pas de réponse et après un avoir effectué un don à l’association nos oignons, je m’attaque aux P.O.I.
Toujours dans cette même page, à la suite des coordonnées du tracé, une ligne m’interpelle :
downloadUrl("http://www.levoyageanantes.fr/contenu-carte/", function(doc) {
J’ouvre la page : page blanche, dommage… Je prends un thé pour me réveiller et me rend compte que la page n’est pas vide. Il s’agit bien des marqueurs sous forme de XML. Dommage pas le même format que GPX qui ressemble à ceci :
<wpt lon="-122.326897" lat="47.644548">
<name></name>
<desc></desc>
</wpt>
Bon cette fois ci, pour transformer du XML en XML, j’ai peur que les regex soient contre-productives, donc j’écris trois lignes de PHP :
<?php
$contents = file_get_contents('php://stdin');
$xml = simplexml_load_string($contents);
foreach ($xml as $line) {
$line['title'] = ucfirst(strtolower($line['title']));
$line['subtitle'] = ucfirst(strtolower($line['subtitle']));
echo <<<EOD
<wpt lon="{$line['lng']}" lat="{$line['lat']}">
<name>{$line['title']}</name>
<desc>{$line['subtitle']}
[[{$line['link']}]]
{{{$line['image']}}}</desc>
</wpt>
EOD;
}
Et c’est parti :
wget -q http://www.levoyageanantes.fr/contenu-carte/ -O - \
| php poi.php
Il ne reste plus qu’à coller ceci à la suite du tracé, corrigé à la main les « É » et « È » qui n’ont pas été converti en minuscule et voilà toutes les informations dans un format utilisable par tous et partout.
Le partage
J’aurais pu m’arrêter là mais partager un fichier GPX, ce n’est pas terrible. J’ai donc longuement cherché un site utilisant open street map et des logiciels libres pour y déposer mon fichier. C’est probablement ce qui m’a pris le plus de temps…
Il y a bien www.openstreetmap.org mais il faut
des traces (<trk>
) et non des routes (<rte>
) avec un horodatage (bref un
vrai trajet fait avec les pieds).
Après quelques recherches infructueuses, je me suis rappelé du projet wifi de faimaison dont j’avais vu passé une carte sur un service en ligne, dix minutes pour retrouver le site dans mon historique : il s’agit d’umap.
J’ai simplement configuré le gabarit de la popup pour y rajouter la balise
desc
et voila !
Vous pouvez télécharger les données via le menu plus, exporter et partager la carte.
Ah et sinon il existe une application pour Android. En voyant son id, je me suis dit que j’avais peut-être fait cela pour rien :
@kheops2713 et maintenant que j’ai terminé, je me demande si @clever_cloud n’aurait pas le fichier GPX de @levoyageanantes (cc @clementd)
— sanpi (@sanpi_) 28 Juin 2015
La suite
Deux semaines plus tard, aucune réponse mais une nouvelle carte est publiée avec un parcours en vélo le long de la Loire, de Nantes à Saint-Nazaire. Du coup je ne vais pas me priver pour recommencer :
Bon @levoyageanantes, je ne vais pas perdre mon temps à te poser la question, je t’envois directement le gpx dans 1h http://www.estuaire.info/fr/le-parcours/ #OpeningData
— sanpi (@sanpi_) 10 Juillet 2015
Il m’aura fallu que 30 minutes :
Le front de libération des données.
-
D’aprés la page wikipedia en anglais ↩