Carte Garmin multicouche
Par Lionel le jeudi 28 janvier 2010, 13:34 - Géomatique - Lien permanent
Une seule carte n'est parfois pas suffisante par afficher toutes
informations que l'on souhaite ou pour utiliser toutes les fonctionnalités dont
on a besoin. La solution est la carte multicouche.
Nous allons voir pourquoi mais bien sûr aussi comment.
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.
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.
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.
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).
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

Commentaires
Merci beaucoup pour vos tutos sur mkgmap. Ce sont les seuls que j'ai trouvé. Merci merci
Cependant, il me semble pas avoir trouvé d'information sur le fichier .typ. C'est lui qui décide comment vont être rendus les informations il me semble.
Et tu indique tester tes cartes avec qlandkarte, mais chez moi, je n'ai pas pu.
Voila des idées d'articles qui me serviront très fortement.
Pour les fichiers .TYP, voir cet article.
Et si ça manque de clarté, n'hésite pas à le faire remarquer
Oups, merci beaucoup !
Je n'avais pas vu cet article.
Je viens de voir que tu avait mis également tes articles sur le wiki, c'est plus facile à suivre les étapes.
Je suis en train de faire des essais maintenant qu'avec les building=* pour le moment. Mais impossible de les voir sur le GPS. Je ne sais pas trop comment faire le lien entre les codes garmin de la nomenclature feature list, la liste déroulante sur l'éditeur de fichier .TYP et mon fichier polygons dans mon dossier de style. Je n'ai pas tout saisi avec TypeID et le SubTypeID dans chacun des fichiers,... Bref; rien ne s'affiche
Merci d'avance pour l'éclaircissement
Dans le fichier polygons du style, ajouter la ligne :
Dans l'éditeur de fichier TYP, choisir le type
13 [Man made area (Building)], associé à un draw order (l'équivalent du layer dans OSM) assez élevé pour apparaître au-dessus des autres polygones.merci pour tous les tutos sur votre site qui sont très interessant