GeoActivityPlayground: Exportierte Tiles als Garmin-Karte

Seitdem ich Geo Activity Playground entdeckt habe, nutze ich die exportierten Missing Tiles für die Planung von Radtouren. Ein Anwendungsfall besteht darin, die Missing Tiles als Overlay im Garmin-IMG-Format anzuzeigen, z.B. auf dem Garmin-Navi oder in QMapShack. In QMapShack ist das insbesondere dann nützlich, wenn die aus Geo Activity Playground exportierten Tile-Dateien nachträglich verändert werden, z.B. wie hier beschrieben auf eine bestimmtes Gebiet reduziert werden. Letzteres ist notwendig, weil QMapShack leider keine GeoJSON-Daten anzeigen kann, dafür aber Garmin-IMG-Karten.

Verwendete Tools:

  • mkgmap: Erstellt aus einer OSM-XML-Datei eine Garmin-Karte.
  • TypViewer oder ein anderer TYP-Editor: Erstellen/Modifizieren der Garmin-TYP-Datei
  • ogr2osm.py: Wandelt eine Datei Datei in einem OGR-Format in das OSM-Format um
  • jq oder xmlstarlet

mkgmap benötigt

  • eine Datei im OSM-Format mit den Geodaten der Tiles
  • Stil-Dateien, welche festlegen, wie die Objekten in der OSM-Datei den Objekttypen in der Garmin-Karte zugeordnet sind
  • eine TYP-Datei, welche festlegt, wie die Garmin-Objekttypen im Gerät angezeigt werden

Ausgangspunkt ist eine aus Geo Activity Playground exportierte Datei der Missing Tiles im GeoJSON-Format. Für die Verarbeitung mit mkgmap muß sie in das OSM-XML-Format konvertiert werden. Dies geschieht mit ogr2osm:

ogr2osm.py -f -o missing.osm missing.geojson

Dies erzeugt eine OSM-Datei, welche die Tiles als geschlossenen Wege enthält. Damit diese Wege in die Garmin-Karte übernommen werden, benötigen sie mindestens ein OSM-Attribut. Ich habe dafür type=file verwendet. Dieses Attribut kann man entweder mit jq vor der Konvertierung zu der GeoJSON-Datei hinzufügen oder danach mit xmlstarlet zu der erzeugten OSM-Datei, also:

cat missing.geojson | jq '.features[].properties += {"type":"tile"}'> missing1.geojson

bzw.:

xmlstarlet ed -s "//way" -t elem -n "tag" -v ""\
              -i "//way/tag" -t attr -n "k" -v "type"\
              -i "//way/tag" -t attr -n "v" -v "tile"\
           missing.osm > missing1.osm

Für die Umsetzung der OSM-Objekttypen in Garmin-Typen habe ich eine vorhandene TYP-Datei M0001311.TYP mit TypViewer modifiziert:

  • Linientyp 0x10f13 für die Umrandung des Tiles
  • Polygontyp 0x10f0e für die Füllung des Tiles

Die Stil-Defintion für mkgmap ist damit recht simpel:

Datei lines: type=tile [0x10f13 level 6 continue] Datei polygons: type=tile [0x10f0e level 4] Datei options: levels = 0:24,1:23,2:22,3:21,4:19,5:18,6:16,7:14

Damit sieht der Aufruf von mkgmap so aus:

mkgmap --description=DE_Sued_Tiles\
       --country-name=Germany
       --country-abbr=DE\
       --series-name=Tiles\
       --family-name=Tiles\
       --area-name=DE_Sued\
       --style-file=mkgmap-style-explorer-tiles/\
       --family-id=1311
       --product-id=1\
       --gmapsupp\
       --draw-priority=26\
       --transparent\
       --output-dir=out\
       M0001311.TYP missing.osm 

Die Karte wird als gmapsupp.img gespeichert. Je nach Garmin-Gerät und verwendeten Karten müssen die Parameter ggf. angepasst werden. In meinem Fall hat die Karte auf dem Garmin Etrex 30x erst funktioniert, nachdem ich sie mit GMapTool modifiziert habe:

 gmt -w -e 63250002 gmapsupp.img
Explored Tiles in GeoActivityPlayground

Explored Tiles in GeoActivityPlayground

Garmin-Karte der Missing Tiles auf dem Garmin Etrex 30x

Garmin-Karte der Missing Tiles auf dem Garmin Etrex 30x

Garmin-Karte der Missing Tiles in QMapShack

Garmin-Karte der Missing Tiles in QMapShack