Une carte des stations Vélib’ sur Nokia N800
Par Olivier Mengué le jeudi 2 août 2007, 23:17 - Code - Lien permanent
Vélib’, c'est génial ! Abonné depuis deux jours et déjà accro ! Vive le vélo Plug'n Play ! Vive le vélo jetable !
Néanmoins, un outils devient vite indispensable : la carte des stations.
Je suis l'heureux propriétaire d'un Nokia N800 : c'est une « tablette Internet », avec connexions wifi, Bluetooth et un écran 800x480. Le tout fonctionne avec un système ouvert : Linux. Et ça tient dans la poche.
Le logiciel Maemo Mapper pour le N800 permet de télécharger des fonds de carte (Google Maps notamment) et de les afficher. Ces cartes peuvent aussi être récupérées dans un cache pour consultation hors-ligne. Ainsi on peut avoir tous les plans de Paris de Google Maps dans la poche, sans connexion Internet. Maemo Mapper peut aussi afficher les informations d'un GPS Bluetooth.
J'ai donc créé une base de points d'intérêt (POI) pour afficher les stations Vélib’ dans Maemo Mapper.
Mais ma source des données pour les emplacements des stations n'est pas libre : il s'agit du fichier XML publié sur le site officiel (http://www.velib.paris.fr/service/carto, voir ce forum). Je préfère donc éviter de distribuer le fichier terminé. Je vais par contre vous expliquer comment recréer vous-même ce fichier.
Lisez la suite de ce post pour voir le code...
Mise à jour : j'ai publié une v2.0. Mais lisez d'abord ce post.
Voici les outils que j'ai utilisés :
- curl pour récupérer le fichier XML des stations (mais vous pouvez simplement utiliser votre navigateur web)
- xsltproc pour transformer les données en script SQL. Sous Windows, il vous faut
xsltproc.exe
,libxml2.dll
,libxslt.dll
,libexslt.dll
,iconv.dll
,zlib1.dll
, à piocher dans les divers zips. - sqlite3 pour créer la base de POI. Téléchargez les "Precompiled binaries For Windows" ici.
Pour transformer les données des stations, j'utilise une transformation XSLT :
<?xmlversion="1.0"encoding="UTF-8"?> <!-- stations2mm.xslt Copyright © 2007 Olivier Mengué http://o.mengue.free.fr/ Maemo Mapper POI format: http://eko.one.pl/index.php?page=Nokia770_software#Details --> <xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:outputmethod="text"encoding="UTF-8" /> <xsl:strip-spaceelements="*"/> <xsl:templatematch="/markers">-- Script SQLite pour construire une base POI des stations Vélib pour Maemo -- Mapper http://gnuite.com:8080/nokia770/maemo-mapper/ (Nokia 770, N800). -- See http://eko.one.pl/index.php?page=Nokia770_software#Details -- -- Créé avec stations2mm.xslt (http://o.mengue.free.fr/) -- -- Pour céer le fichier: -- sqlite3 -init velib.sql poi.db PRAGMA encoding = "UTF-8"; CREATE TABLE IF NOT EXISTS poi (poi_id INTEGER PRIMARY KEY, lat REAL, lon REAL, label TEXT, desc TEXT, cat_id INTEGER); CREATE TABLE IF NOT EXISTS category (cat_id INTEGER PRIMARY KEY, label TEXT, desc TEXT, enabled INTEGER); -- Placez 'Velib.jpg' dans un sous-répertoire 'poi' de votre dépôt de cartes INSERT INTO category (label, desc, enabled) VALUES ('Velib', NULL, 1); <!-- Ignore les stations dont les coordonnées ne sont pas définies lat=27.1409733745, lng=-3.40456062425 --> <xsl:apply-templatesselect="marker[@lat!='27.1409733745']"/> </xsl:template> <xsl:templatematch="marker">INSERT INTO poi (lat, lon, label, desc, cat_id) VALUES (<xsl:value-ofselect="@lat"/>, <xsl:value-ofselect="@lng"/>, "VELIB <xsl:value-ofselect="@number"/>", "<xsl:value-ofselect="@address"/>", 1); </xsl:template> </xsl:stylesheet>
Voici les commandes à lancer :
$ curl http://www.velib.paris.fr/service/carto > stations-velib.xml $ xsltproc -o stations-velib.sql stations2mm.xslt stations-velib.xml $ sqlite3 -init stations-velib.sql velib-poi.db Loading resources from stations-velib.sql SQLite version 3.4.1 Enter ".help" for instructions sqlite> .q
Il suffit alors de transférer sur le N800 la base de données velib-poi.db
. Dans le menu Settings..., onglet POI, sélectionnez enfin le chemin de votre POI database.
Pour afficher une icône spécifique comme symbole de station, placez une petite image JPEG nommée Velib.jpg
(même nom que la catégorie) dans un sous-répertoire poi
du répertoire de cache des fonds de carte.
Mise à jour : j'ai publié une v2.0.