FR:User:Petrovsk/Contour map Garmin

From OpenStreetMap Wiki
Jump to navigation Jump to search
Relief sur un Garmin Oregon 300

La mission SRTM

Le vol STS-99 de la NASA, consistant à réaliser la mission SRTM (Shuttle Radar Topography Mission), a eu lieu du 11 au 22 février 2000. Le radar altimétrique était composé d'un émetteur/récepteur situé dans la soute de la navette Endeavour et d'un récepteur au bout d'un mât de 60 mètres déployé latéralement, la topographie étant obtenue par interférométrie.
La mission a ramené près de 10 To de données qui ont permis de réaliser une carte topographique de la planète entre 54° de latitude sud et 60° de latitude nord. Ces données brutes ont été transformées en jeux de données librement disponibles sur les serveurs de la NASA.

Srtm2Osm

Ce logiciel télécharge les données SRTM d'une zone définie et les transforme en courbes de niveau au format OSM. C'est un programme Windows nécessitant l'environnement .NET. Wine et Mono (en version Windows à installer dans Wine) permettent de l'utiliser sous Linux et Mac OS X.

La syntaxe complète se trouve sur la page wiki Srtm2Osm, je vais détailler les options dont j'ai eu besoin.
Il s'agit premièrement de définir la zone à récupérer. Je le fais sous la forme d'une bounding-box, les coordonnées étant données dans l'ordre S-W-N-E :

-bounds1 42.124 0.9877 44.971 4.851

Nous devons ensuite définir l'intervalle entre deux courbes de niveau (en mètres) à l'aide de l'argument step. Nous ajoutons l'éventuelle catégorisation des courbes.

-step 25 -cat 500 100

Dans l'exemple ci-dessus, des courbes de niveau sont créées tous les 25m avec le tag contour_ext = elevation_minor, les multiples de 100 auront le tag contour_ext = elevation_medium et les multiples de 500 contour_ext = elevation_major. Ces tags permettront aux styles de mkgmap de ne faire apparaitre les courbes mineures qu'aux zooms les plus forts. Le style par défaut prend en charge les courbes de niveau.
Finalement, des paramètres de correction et l'argument -large pour les grandes zones complètent la commande. En ajoutant l'invocation et le fichier de sortie, la commande finale est :

wine ./Srtm2Osm/Srtm2Osm.exe \
-bounds1 42.124 0.9877 44.971 4.851 \
-step 25 -cat 500 100 \
-large -corrxy 0.0005 0.0006 \
-o LR+_topo_25.osm

Pour la bounding-box indiquée, correspondant à cette zone et ayant une partie montagneuse marquée, trente minutes de calcul ont été nécessaires et ont abouti à la création d'un fichier OSM de 990 Mo, se réduisant à 100 Mo après compression.
Srtm2Osm conserve les données brutes téléchargées dans un dossier-cache afin de ne pas avoir à les télécharger à nouveau en cas de travail compris dans la même zone.
Il est à noter que les données rapatriées par Srtm2Osm contiennent des trous dans les zones escarpées, trous repérables par leur incohérence avec les courbes environnantes.

Utilisation avec mkgmap

C'est l'occasion d'évoquer les cartes Garmin à couches multiples. Il n'est pas question ici d'ajouter les données SRTM aux données OSM de votre carte, mais de créer deux cartes distinctes (cartographie et relief) qui seront regroupées dans un même fichier .img et désactivables séparément. C'est possible en attribuant des family-ID (FID) différents à chaque carte. Par défaut, le FID est 42, j'ai choisi de donner le FID 44 au relief en ajoutant l'argument --family-id=44 à la commande mkgmap.
Pour pouvoir apparaître au-dessus de la cartographie OSM, les courbes de niveau doivent avoir une priorité supérieure et un fond transparent. Il faut alors ajouter les arguments --draw-priority=25 par exemple (le chiffre le plus fort est au-dessus) et --transparent.

java -Xmx1G -jar mkgmap.jar --draw-priority=25 --transparent --family-id=44 srtm.osm

Il reste une dernière subtilité à préciser. Dans le cas où une grande zone est couverte, les données devront être découpées à l'aide du splitter pour pouvoir être rendues par mkgmap. Pour fonctionner, le splitter a besoin de l'argument --mixed=true. C'est l'occasion de donner aux cartes créées un numéro distinct, mkgmap leur donnant par défaut un numéro commençant à 63240001.
Une commande complète du splitter pourra être de la forme :

java -Xmx1G -jar splitter.jar --mixed=true --mapid=72500001 ../topo/LR+_topo_25.osm

Mkgmap se pilote alors comme d'habitude avec le splitter :

 java -Xmx1G -jar mkgmap.jar --draw-priority=25 --transparent --family-id=44 -c template.args