Introduction

Participer à la création d'une carte libre c'est bien. Pour profiter au maximum du projet OSM il est intéressant de savoir où des données manquent (pour les ajouter) et au final pouvoir utiliser ces cartes au quotidien.
Si comme moi vous n'appréciez que moyennement les cartes rachitiques fournies avec les GPS de randonnée, jamais mises à jour, ni les cartes propriétaires fournies à prix d'or et utilisables après des procédures de déblocage épiques, vous risquez d'adorer ce qui suit.

gmap-03.jpggmap-04.jpg
Avant et après

Les GPS Garmin utilisent des cartes au format .img. Ces fichiers peuvent être créés assez facilement à l'aide de quelques outils s'utilisant en ligne de commande et dont je vais détailler la mise en oeuvre. Les cartes que nous allons créer se trouveront dans un fichier gmapsupp.img, habituellement utilisé sur les Garmin pour les cartes ajoutées avec le logiciel MapSource.
Si la perpective de taper une ligne de commande ne vous réjouit pas, il y a toujours la possibilité d'utiliser une carte toute prête. Il faut en contrepartie faire avec les inconvénients, surtout de ne pas avoir une carte rapidement à jour, tenant compte de vos dernières éditions à compléter sur le terrain.
Frédéric Bonifas fournit une carte de France. Une carte avec des courbes de niveau est aussi disponible mais elle est beaucoup plus lourde que celle sans relief (530 Mo contre 184 Mo au 10 octobre 2009).
Une édition de la carte de France avec les chemins sans noms mis en avant (error edition) est disponible chez CloudMade (lien en anglais). On peut trouver sur ce même site des cartes pour d'autres pays.
Nous pouvons aussi récupérer directement des fichiers .img sur le Garmin image tile calculator (lien en anglais), fichiers .img à combiner avec mkgmap, voir le paragraphe "Assemblage des cartes dans un fichier unique" ci-après, et les liens en bas de page pour plus de cartes.

Prérequis

Pour créer une carte Garmin il faut :

  • Des données OSM brutes à partir desquelles seront rendues les cartes
  • Un logiciel de rendu des cartes, mkgmap, programme en java s'utilisant en ligne de commande

Pour se préparer calmement, nous allons commencer par télécharger mkgmap (la version la plus récente, "latest" semble indiquée). Pour ma part j'ai choisi la plus récente à ce jour, la r967 et l'ai décompressée dans un dossier dans lequel nous allons faire toutes les manipulations. La suite est spécifique à Mac OS, devrait être quasi identique pour Linux et assez semblable pour Windows.
Prenons une grande respiration et ouvrons le Terminal, il s'agit tout d'abord de se placer dans le dossier de travail où se trouve mkgmap.
Si vous avez déjà utilisé le Terminal, allez dans le dossier de mkgmap et passez directement au paragraphe suivant. Dans le cas contraire, le Terminal se trouve dans le dossier Applications/Utilitaires.
Le plus simple est d'ouvrir une fenêtre du Finder, aller jusqu'au dossier de mkgmap décompressé, de prendre le fichier mkgmap.jar (le programme lui-même) et de le glisser dans la fenêtre du Terminal, qui affiche alors une ligne de ce genre :

MacBook-de-Lionel:~ Petrovsk$ /Users/Petrovsk/Documents/GPS/OSM/mkgmap-r967/mkgmap.jar

La partie MacBook-de-Lionel:~ Petrovsk reprend le nom de mon ordinateur et mon nom d'utilisateur.
La partie /Users/Petrovsk/Documents/GPS/OSM/ sera remplacée par le chemin où vous avez extrait mkgmap.
Pour aller dans le dossier, il faut utiliser la touche d'effacement (pour effacer mkgmap.jar) et les flèches pour ajouter cd et se retrouver avec ceci :

MacBook-de-Lionel:~ Petrovsk$ cd /Users/Petrovsk/Documents/GPS/OSM/mkgmap-r967/

Attention à ne pas oublier l'espace entre cd et /, appuyer sur entrée. Le Terminal affiche alors :

MacBook-de-Lionel:mkgmap-r967 Petrovsk$

Nous sommes bien dans le dossier mkgmap-r967, et nous pouvons passer maintenant aux choses sérieuses.

Récupération des données

Nous pouvons récupérer les données de plusieurs façons, par le site OpenStreetMap (onglet Export, limité à de petites zones, par exemple une ville), par JOSM, l'éditeur de données OSM le plus répandu (en téléchargeant la zone souhaitée et en enregistrant la couche en fichier .osm). JOSM est limité à 50000 éléments de carte, c'est bon pour une ville s'il n'y a pas trop de bâtiments cartés ou pour pour plusieurs communes rurales.

Méthode extraits nationaux ou régionaux

Geofabrik met à disposition des extraits nationaux ainsi que les régions françaises, en version compressées (.bz2) à télécharger. C'est la méthode la plus simple pour obtenir des données brutes. Un inconvénient est la possible absence d'éléments proches des frontières, du fait de l'extraction depuis la base de données OSM par un découpage.
Attention, l'extrait français est trop grand pour être traité directement par mkgmap. Il est nécessaire d'utiliser un splitter, comme expliqué dans cet autre article.

Méthode curl/osmxapi

La zone à télécharger sera définie par une "bounding box", ou boîte de délimitation, clairement un rectangle dont on relève les longitudes des bords verticaux et les latitudes des bords horizontaux sur la carte principale OpenStreetMap. Il faut pour cela aller dans l'onglet "Export", afficher la zone souhaitée et noter les latitudes et longitudes affichées à gauche.

gmap-OSM-export.jpg
L'onglet "Export" d'OpenStreetMap.org (cliquer pour agrandir)

Pour récupérer les données, je vais faire appel à osmxapi (lien en anglais), à travers le gestionnaire de transferts curl installé dans Mac OS X. C'est une méthode adaptée pour des zones moyennement grandes, c'est-à-dire pour la France entre la région et le département. C'est généralement assez lent et parfois sujet à des coupures. Autre inconvénient, osmxapi récupère des données non-compressées, cela rallonge d'autant plus le téléchargement, la méthode est à réserver à des zones plutôt petites.
Comme c'est plus clair avec un exemple, revenons au Terminal.
Je vais récupérer deux jeux de données, un pour le Sud-Aveyron et un autre pour les Pyrénées-Orientales. J'ai relevé les coordonnées des bounding boxes comme indiqué ci-dessus. J'ai choisi deux zones pour pouvoir montrer comment joindre plusieurs cartes dans un même fichier, si une seule zone vous intéresse il suffit de zapper l'étape d'assemblage.
Pour récupérer les données OSM pour le Sud-Aveyron je tape:

curl -L "http://www.informationfreeway.org/api/0.6/map?bbox=2.503,43.731,3.333,44.28" -o data-AV-090304.osm

En clair on invoque curl, l'option -L permet à curl de reposer sa requête si une nouvelle adresse a été renvoyée par le serveur. http://www.informationfreeway.org/api/0.6/map? permet d'interroger le serveur informationfreeway.org (un des sites utilisant les données OSM) par l'intermédiaire de osmxapi avec l'argument bbox=2.503,43.731,3.333,44.28, soit les coordonnées de la bounding box entrées dans l'ordre ouest, sud, est, nord. -o indique que curl doit écrire les données dans un fichier nommé data-AV-090304.osm
Puis j'appuie sur entrée. S'ensuit une enfilade de lignes montrant la progression du téléchargement (environ 20 Mo de données dans le cas exposé).
Je recommence la manoeuvre pour les Pyrénées-Orientales :

curl -L "http://www.informationfreeway.org/api/0.5/map?bbox=1.755,42.327,3.194,42.876" -o data-PO-090304.osm

Il suffit de ré-afficher la dernière commande dans le Terminal avec la flèche du haut et aller changer la bounding box et le nom de fichier (sinon il écrase le précédent sans préavis).

Une astuce permet de récupérer un ensemble de zones en une seule étape : en mettant la liste des commandes nécessaires dans un fichier texte et en l'appelant avec la commande source.

gmap-source.png

La première ligne du fichier Dump_OSM.txt demande de se placer dans le dossier Datasets où je stocke mes zones de travail. Les lignes suivantes sont les commandes de téléchargement des données OSM des zones (sept dans ce cas). Dans le Terminal, taper source puis glisser le fichier Dump_OSM.txt dans la fenêtre depuis le Finder pour éviter de taper son adresse. Le Terminal affiche alors quelque chose dans ce genre :

source /Users/Petrovsk/Documents/GPS/OSM/Dump_OSM.txt

Appuyer sur entrée et quelques minutes après il y a sept fichiers OSM dans le dossier Datasets.

Méthode extrait par osmosis

Une dernière méthode consiste à se fabriquer ses propres extraits (comme ceux de Geofrabrik) en découpant un extrait national, européen ou même pourquoi pas le planet (totalité de la base OSM) à l'aide d'osmosis.
Cela nécessite suffisamment d'attention pour justifier un article séparé.

Création des cartes

C'est maintenant que mkgmap entre en jeu. Pour créer la carte pour le Sud-Aveyron, taper:

java -Xmx512M -jar mkgmap.jar --mapname="09030401" data-AV-090304.osm

java -Xmx512M -jar mkgmap.jar indique de lancer mkgmap.
--mapname="09030401" (avec un double tiret) permet de fixer le nom de la carte qui sera créée. Cela doit être un nombre quelconque à 8 chiffres, sans l'extension .img, sinon il y aura une erreur.
data-AV-090304.osm est la source des données à rendre.
Comme résultat on obtient le fichier 09030401.img dans le dossier de travail.

Un aparte au sujet de la mémoire : comment savoir s'il faut en rajouter ? En principe 512 Mo suffisent pour la plupart des travaux. Si c'est insuffisant, l'erreur suivante apparaît sur le Terminal :

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Message suivi de l'emplacement des erreurs. Il faut alors augmenter la mémoire allouée à java en précisant java -Xmx1G par exemple. La limitation à venir sera la mémoire disponible pour le système qui va se mettre à ramer s'il est à l'étroit. Je considère qu'au-delà d'un gigaoctet alloué (sur les deux que compte mon ordinateur) il est nécessaire de simplifier les opérations en travaillant sur des zones plus petites.

Créons la carte des Pyrénées-Orientales :
java -Xmx512M -jar mkgmap.jar --mapname="09030402" data-PO-090304.osm

On obtient le fichier 09030402.img dans le dossier de travail. Si à ce niveau vous ne souhaitez utiliser qu'une seule carte, renommez-la gmapsupp.img et copiez-la dans le répertoire Garmin de votre GPS.

Assemblage des cartes dans un fichier unique

Finalement on inclut les deux cartes précédemment créées dans un fichier gmapsupp.img, toujours à l'aide de mkgmap :

java -Xmx512M -jar mkgmap.jar --gmapsupp 09030401.img 09030402.img

Le fichier ainsi obtenu sera copié dans le répertoire Garmin du GPS.

On remarque que je n'ai pas parlé du rendu proprement dit, faisant intervenir des fichiers de style (fournis avec mkgmap) pour définir l'apparence de la carte. L'édition de ces fichiers de style permet de personnaliser les cartes en changeant les couleurs ou en mettant en avant les pistes cyclables ou les sentiers de randonnée. Cette édition demande un temps considérable pour la définition des paramètres intéressants et de toute manière sort du cadre étroit de ce didacticiel, à savoir comment réaliser des cartes Garmin.

Dans le menu Config.>Carte>Config. av. page Carte du GPS, en activant "Show if available" de l'option "Shaded relief" on obtient sur la carte le relief ombré du fond de carte européen sous les routes et autres données OSM.

gmap-02.jpg
Les environs de Prades dans les Pyrénées-Orientales

Nous avons désormais à disposition une carte montrant tous les chemins présents dans OSM, jusqu'aux chemins de randonnée et il devient facile d'aller sur le terrain récupérer les portions de routes manquantes pour compléter la carte.

Liens


Sur ce blog


Cartes de France


Autres téléchargements de cartes Garmin