La nécessité de couches multiples

Seule une partie des routes et chemin disponibles dans les types Garmin sont routables. L'exemple le plus frappant est celui des rond-points. Il n'y a dans la nomenclature Garmin qu'un seul type de rond-point qui soit routable alors qu'OpenStreetMap possède des rond-points de routes primaires, secondaires, tertiaires, résidentielles… Il faut se résoudre à n'utiliser qu'un seul type de rond-point pour conserver le routage, ou bien s'en passer en utilisant plusieurs types de rond-points.
La solution est de réaliser une couche personnalisée par un fichier TYP, à but purement esthétique et à avoir une couche de routage invisible en fond. Nous pouvons ajouter une couche pour le relief et aboutir aux trois couches typiques. Ces couches étant désactivables à volonté, nous pourrons ainsi soulager le GPS en n'activant les couches utiles uniquement lorsque nécessaire.

oregon_300_carte_multicouche.png
Une carte à trois couches sur un Oregon 300.

Créer une carte triple couche

En partant du dessus, nous trouverons une couche relief transparente affichant les courbes de niveau, suivie de la carte à afficher que nous prendrons soin de ne pas rendre transparente pour ne pas révéler la troisième carte ne servant que pour le routage. Cette couche de routage ne devant contenir que les types de voies routables, elle est définie par un style (en annexe) supprimant les autres types de lignes, ainsi que les polygones. Les points sont conservés pour la recherche.
Les couches sont rendues indépendantes en ayant un numéro de famille différent. Ce numéro de famille est aussi utilisé pour le typage. Chaque fichier TYP a son numéro de famille et ne s'appliquera qu'à la couche ayant le même. Nous allons aussi voir comment utiliser les mêmes données pour le fond de carte et le routage.

Principe de base

Pour cet exemple je vais partir de la carte que je fabrique pour mon usage personnel. Elle est créée à partir d'une base locale, fichier OSM maintenu à jour et couvrant ma région.
Le fichier OSM est découpé par le splitter, les fichiers issus de la découpe sont accompagnés d'un fichier de commande (template.args) que nous allons dupliquer et modifier pour créer deux jeux de carte, pour le fond et le routage. Ces jeux seront assemblés d'une carte unique en y ajoutant le relief.

carte_multicouche.png

Création des deux jeux de cartes

Dans RoadTrip (et MapSource), les cartes ne sont pas affichées selon la priorité indiquée à mkgmap, mais selon le classement alphabétique basé sur leur nom. Le splitter crée des fichiers dont le nom est séquentiel et commence à 63240001. Pour que la carte de routage se trouve sous le fond de carte dans RoadTrip, je vais la créer à partir de fichiers dont le nom commence à 61000001. Pour cela, je vais dupliquer le fichier template.args en routage.args et changer les références aux fichiers 6324xxxx.img en 6100xxxx.img. Cela se fait en une seule étape avec la commande sed, dont la syntaxe est comme suit :

sed 's[chaîne à remplacer]/[chaîne à substituer]/g' [fichier à traiter] > [nouveau fichier]

Appliqué à notre cas cela devient :

sed 's/mapname: 6324/mapname: 6100/g' template.args > routage.args

Invocation de mkgmap

Il faudra successivement demander à mkgmap d'utiliser ces deux fichiers de commande pour créer les couches de fond et de routage. Nous ajouterons dans la commande les options de priorité pour définir l'ordre d'affichage sur le GPS, la transparence pour le relief et les numéros de famille.
Le nom de la couche (en gras sur la capture du GPS) est défini par --family-name="[nom]", le texte au-dessous étant --description ="[description]". Ce dernier est identique pour toutes les couches, il ne faut le préciser qu'une fois. Le nom de la carte dans RoadTrip est défini par --series-name="[nom]". Nous ajoutons aussi à chaque commande le style à utiliser.
Il faudra ensuite regrouper toutes les couches créées dans un fichier unique avec l'argument --gmapsupp. Pour simplifier les opérations, la création de chaque couche et la création de la carte finale seront incluses dans une seule commande.
Récapitulons ce dont nous avons besoin.

Commandes générales

--gmapsupp et --tdbfile pour assembler toutes les cartes dans un fichier unique, le fichier TDB sert pour afficher la carte dans RoadTrip ou Qlandkarte GT. La description de la carte est "OSM LR+ par Petrovsk"

Fond de carte

Fond de carte de famille 42, de nom "Pseudo-mapnik OSM", défini dans le style "mapnik", avec génération de polygones pour la mer (--generate-sea=extend-sea-sectors), de priorité 25 et créé à partir du fichier template.args et fichier TYP "mapnik". [Plus d'information sur ce style]

Routage

Couche de routage de famille 43, de nom "Routage OSM", définie par le style "routage" (en annexe), de priorité 5 et créée à partir du fichier routage.args.

oregon_300_routage.png
Couche de routage.

Relief

Couche de courbes de niveau de famille 44, nommée "Relief SRTM 25m", définie par le style par défaut (non précisé), transparente et de priorité 50, représentée par le fichier "topo_25_LR+.img" et typée par le fichier "44-contours-brown-l.TYP" (en annexe).

oregon_300_relief.png
Couche de relief colorée par un fichier TYP.

Soit au final :

java -Xmx1G -jar mkgmap.jar --gmapsupp --tdbfile \
--family-id=42 --family-name="Pseudo-mapnik OSM" \
--draw-priority=25 \
--add-pois-to-areas --style-file=../styles/mapnik/ \
--remove-short-arcs --max-jobs --latin1 \
--country-name="France" --country-abbr="FR" \
--generate-sea=extend-sea-sectors -c template.args \
--family-id=43 --family-name="Routage OSM" --route \
--draw-priority=5 --style-file=../styles/routage/ \
--add-pois-to-areas --remove-short-arcs \
--max-jobs --latin1 \
--country-name="France" --country-abbr="FR" -c routage.args \
--family-id=44 --family-name="Relief SRTM 25m" \
--draw-priority=50 --transparent \
--remove-short-arcs --max-jobs --latin1 \
--series-name="OSM LR+ relief" --description="OSM LR+ par Petrovsk" \
topo_25_LR+.img ../typ/mapnik_no_poi.TYP ../typ/44-contours-brown-l.TYP