Article mis à jour le 07/05/2022
Amateur de rando et de VTT, j’utilise beaucoup OsmAnd (sur Android). Cette app peut-être mise à jour quotidiennement, ce qui est assez pratique et un réel plaisir lorsqu’on édite les cartes d’avoir les nouveaux chemins tracés sur son smartphone quelques heures après. Pour l’usage VTT je me suis mis à la recherche d’un GPS (plus pratique que de s’arrêter pour prendre le téléphone dans le sac à dos) et mon choix s’est porté sur le Garmin Edge 830. L’avantage de ce GPS est de pouvoir utiliser les cartes OpenStreetMap et de bénéficier ainsi de mises à jour à la demande. Encore faut-il disposer des cartes à jour dans le format qui lui convient pour les lui faire avaler… Cet article décrit la marche à suivre et pourquoi / comment j’ai voulu automatiser la chose.
Téléchargement
Carte de France OpenStreetMap au format Garmin
mise à jour quotidiennement.
Le fichier que je propose est mis à jour entre 7h30 et 8h30 tous les matins (l’horaire est variable car dépendant de la qualité de ma connexion internet). La date indiquée dans le nom de l’archive correspond au jour de l’upload sur le serveur. Le fichier gmapsupp.img contient les mises à jour faites jusqu’à la veille, 20h20 UTC environ, soit 22h20 heure française.
Le fichier étant relativement lourd (1,7 Go), c’est une version compressée dans une archive bz2. Pour l’ouvrir vous pouvez utiliser 7z, téléchargeable sur le site de l’éditeur si besoin: Télécharger 7zip.
La démarche
J’ai trouvé les explications sur le site numeriquement.fr . Tout y est détaillé, les explications sont claires et la recette fonctionne bien. Tous les détails sont ici: https://numeriquement.fr/…/generation_fichier_openstreetmap.php . Je mets tous les détails en fin d’article.
C’est assez fastidieux à faire « à la main », l’opération demande du temps et de la disponibilité matérielle. Il faut télécharger l’archive contenant la carte de France, la décompresser (elle passe alors de 6 Go à 78 Go), la passer à la moulinette de splitter, modifier le fichier template.args, puis passer tout ça dans mkgmap (arrivé là les différentes opérations prennent déjà plus de 2h sur la machine qui me sert à faire ce travail), et pour finir uploader le fichier. Bref, c’est chronophage, tout se fait en ligne de commande… La recette est bonne mais la préparation est chiante.
Me voilà donc parti sur la rédaction d’un script bash pour automatiser tout ça. Oh, rien de bien prétentieux hein. Le script télécharge l’archive et lui applique les différentes étapes. À la fin il supprime tout sauf le fichier gmapsupp.img, prêt à être copié sur le GPS puis génère une archive Bzip2 prête à être uploadée sur Google Drive et l’envoie sur l’hébergement.
Pour les détails
Comment je procède, dans les grandes lignes. Les liens vers les utilitaires utilisés sont en fin de chapitre.
Téléchargement de la carte OpenStreetMap
La map est téléchargée sur la page http://download.geofabrik.de/europe/france.html . J’utilise l’archive france-latest.osm.bz2 disponible dans la section « Other Formats and Auxiliary Files« . J’utilise l’archive france-latest.osm.pbf disponible dans la section « Commonly Used Formats ».
Traitement du fichier
Concernant le traitement de la carte je n’ai rien inventé, comme annoncé en début d’article tout est tiré de la page https://numeriquement.fr/…/generation_fichier_openstreetmap.php à l’exception de la conversion du fichier pbf en fichier osm.
Osmconvert
Le travail sur la version pbf implique d’utiliser un utilitaire nommé osmconvert pour convertir le fichier en .osm pour qu’il puisse être traité par splitter par la suite. Cet utilitaire fait partie d’un paquet, osmctools, installable via les dépôts Debian. La commande utilisée est toute simple:
osmconvert france-latest.osm.pbf > france-latest.osm
Splitter
La commande pour utiliser splitter (j’ai juste passé la limite de ram attribuée au programme de 2Go à 8 Go):
java -Xmx8G -jar splitter.jar france.osm
Une fois le fichier découpé avec splitter les lignes suivantes sont ajoutées au début du fichier template.args:
country-name="FRANCE"
country-abbr="FR"
generate-sea=multipolygon,floodblocker
gmapsupp
route
net
remove-short-arcs
Mkgmap
La commande pour traiter tout ça avec mkgmap (ici aussi passage de la limite de ram de 2 à 8 Go):
java -Xmx8G -jar mkgmap.jar -c template.args
Compression et upload
Compression à l’aide de l’utilitaire Lbzip2 histoire de monopoliser un peu moins longtemps la bande passante (merci la 4G en attendant cette #!&$%@ de fibre qui n’arrive jamais…), puis envoi manuel (en attendant de trouver une solution automatisée utilisable en bash) sur Google Drive. puis envoi sur le serveur qui héberge le blog. Depuis que j’ai déménagé le blog ça me permet d’uploader le fichier automatiquement à la fin du script, ce qui donne une map disponible le matin contenant les mises à jour faites jusqu’à la veille au soir vers 20h UTC environ. Auparavant il fallait que je mette le fichier manuellement sur Google Drive (compter une grosse heure avec ma connexion moisie), ce qui pouvait s’avérer compliqué certains jours (départ tôt le matin pour le boulot #MaVie #ToiMêmeTuSais). Une fois sur l’hébergement le script supprime le symlink généré la veille et en génère un nouveau pointant vers le nouveau fichier.
Je ne mets pas le contenu du script à disposition ici parce qu’il contient énormément de détails qui sont propres à mon installation. Si toutefois quelqu’un le souhaite il ne faut pas hésiter à me solliciter, j’en ferai une version nettoyée plus générique.
Liens
Le gitlab d’osmctools: https://gitlab.com/osm-c-tools/osmctools
Le site de splitter et mkgmap: http://mkgmap.org.uk/
La page de téléchargement de splitter: https://www.mkgmap.org.uk/download/splitter.html
La page de téléchargement de mkgmap: https://www.mkgmap.org.uk/download/mkgmap.html
Améliorations envisagées
Si j’y arrive… :o)
- Ajout d’un fichier texte avec quelques renseignements (date de la map par exemple)
Upload autonome, sur Google Drive (ou autre). Pour l’instant je bloque sur l’authentification avec le programme google-drive-upload (dispo sur https://labbots.github.io/google-drive-upload/ )Problème réglé, maintenant le blog et le fichier sont hébergés chez OVH. Fait le 29/04/2022Utilisation du fichier pbf en lieu et place du fichier bz2 (moins lourd à télécharger, moins long à décompresser / convertir au format .osm et mis à jour quotidiennement sur geofabrik.de)Fait le 27/04/2022