„Nop’s Wanderreitkarte“ auf dem Garmin Edge 520

Oder auch: WRK MapCutterScript

Was ist denn das schon wieder? Da muss ich ein wenig weiter ausholen – was ja sonst überhaupt nicht meine Art ist 😉 Wie Du ja hoffentlich schon mitbekommen hast, starte ich Mitte Juli mit Zipo bei der Bike Transalp und werde mich mit tausend(en) anderen Bikern 540km mit guten 18.000 Höhenmetern durch die Alpen sporteln/quälen. Unsere Leidensgeschichte werden wir von unterwegs auf TA17.DE dokumentieren. Um das Training im Vorfeld optimal kontrollieren und steuern zu können, habe ich mir vom Christkind (ja, ich arbeite schon länger an diesem Artikel) ein Garmin Edge 520 gewünscht. Und was soll ich sagen – dieses hat auch seinen Weg unter den Weihnachtsbaum gefunden.

Der GPS-Tacho (ich nenne ihn jetzt mal so) hat ab Werk eine sehr grob aufgelöste Garmin Basiskarte installiert. Diese reicht vom Prinzip aus, um zu erkennen, ob man in Holland oder Schweden ist – für viel mehr taugt diese aber nicht. Aber zum Glück gibt es ja OpenStreetMap! Man findet im Netz einige Anleitungen, wie man sich eine OSM-Karte mit <80MB selbst zusammenschneiden und diese dann auf den Tacho übertragen kann. Hier z.B. in deutsch oder hier auf englisch.

Aber – und jetzt kommt endlich „das Aber“ – ich will für die Kartendarstellung keinen der bei openstreetmap.nl angebotenen OSM-Darstellungen nutzen, sondern ich hätte gerne die Darstellung meiner geliebten Wanderreitkarte. Damit fahre ich nun seit vielen Jahren sehr erfolgreich mit meinem Garmin Vista HCX durch Eifel und Alpen und kann sagen, dass es für mich nichts Besseres gibt. Die Farbgebung ist genial, alle Wegtypen lassen sich eindeutig erkennen und Höhenlinien hat sie auch! Das Bild rechts zeigt ganz gut, was ich meine.


Wenn Du mit den Kartenstilen von openstreetmap.nl zufrieden bist, dann musst Du nicht weiterlesen. Und auch nicht, wenn Du aus der Suche nach einer routingfähigen Karte bist. Es würde mich aber natürlich freuen, wenn Du es trotzdem tun würdest 😉 


Das eigentliche Problem ist aber nicht mein Holzkopf, sondern dass Nop’s Reit- und Wanderkarte für den Alpenraum inzwischen gut 1.5GB groß ist. Das ist für ein Vista HCX mit SD-Kartenslot kein Problem, aber für die eingangs erwähnten 80MB (Update 04/2017: seit der Firmwareversion 11.10 stehen rund 90MB zur Verfügung) des Edge 520 ist das schlicht zu groß.

Eine einfache Möglichkeit, die Wanderreitkarte selektiv zu rendern und dadurch kleiner zu halten habe ich nicht gefunden und der Austausch des TYP-Files in der OSM-Karte ist mir mit den am Markt erhältlichen Werkzeugen auch nicht gelungen. Tja, und der MapComposer überfordert mich irgendwie total.

Und dann hatte ich eine Idee!

Als ich auf der Suche nach einer Lösung meines Problems über die GMapTools stolperte, schoss mir folgendes durchs Hirn:

Wenn es Compiler gibt, die Kartenstücke zu einer Garminkarte zusammenstellen können, dann müsste es doch eigentlich auch etwas geben, was Karten wieder auseinander schneiden kann. Aus den einzelnen Stücken (Kacheln, Tiles) könnte man dann die benötigten raussuchen und sie wieder zu einer kleineren Karte zusammenfügen.

Vom Prinzip tut man dann genau das gleiche, was bei openstreetmap.nl angeboten wird – aber eben nicht aus dem OSM-Kartenrohmaterial, sondern aus einer bestehenden Karte!

Die Kurzfassung vorab: es funktioniert!

Das später folgende Python Skript ermittelt die äußeren „Grenzen“ einer GPX-Datei und anschließend, welche Kartenkacheln der Wanderreitkarte benötigt werden, um diesen Bereich mit Kartendaten zu füllen. Im letzten Schritt werden diese Kartenkacheln und die TYP-Datei zu einer neuen Karte zusammencompiliert. Zum Zerschneiden und Zusammensetzen der Karten verwende ich gmt – die Kommandozeilenversion des GMapTools.

Vorbereitungen: 

Am besten legst Du dir einen Ordner an, wo Du alle Downloads und Dateien reinpackst. Das ist nicht schön und auch unübersichtlich, aber dann hast Du alles an einem Platz und an der Konsole keinen Zirkus mit Pfadangaben. [Außerdem ist das jetzt für mich einfacher zu beschreiben 😉 ] Sortieren und verräumen kannst Du das Ganze – wenn es mal funktioniert – nach eigenem Gusto. Ich habe einfach mal C:\wrk bzw. auf meinem Mac ~/wrk  genommen.

Dann benötigst Du die Ausführung der Wanderreitkarte, die den gesamten von Dir zu verarbeitenden GPX-Track enthält. Bei meinem Beispiel (und auch bei meiner bevorstehenden Bike Transalp) ist das die oben genannte Karte „Alpenraum“. Bitte lade das ZIP-File herunter und entpacke es in den von Dir gewählten Ordner. Wir brauchen daraus nur die einzelne, große gmapsupp.img – der Rest kann sofort in die Tonne. Dann benötigst Du die oben erwähnte Kommandozeilenversion des GMapTools. Bitte ebenfalls im dem Ordner abspeichern. Du findest Sie als Bestandteil der vollständigen Windows Installation (wahrscheinlich hier: "C:\Program Files (x86)\GMapTool\gmt\gmt.exe") bzw. bei MacOS und Linux als eigenständigen Download. Damit schneiden wir die Karte jetzt erstmal auseinander:

C:\wrk> gmt -S gmapsupp.img

Das rödelt nun eine Zeit lang vor sich hin und erzeugt dabei jede Menge einzelne Kartenkacheln und ein paar Steuerdateien. Für uns wichtig sind die achtstellig-numerischen IMG-Dateien, die zugehörige achtstellig-numerische TYP-Datei sowie die Datei mapset.mp – der Rest kann ebefalls in die Tonne.

Öffnet man die mapset.mp in einem Editor (ich möchte an dieser Stelle mal Sublime Text empfehlen), so erkennt man das Prinzip recht schnell: jede Kartenkachel hat eine ID (die uns zur passenden IMG-Datei führen wird) und vier Eckkoordinaten für den von der Kartenkachel abgedeckten Bereich:

[POLYGON]
Type=0x4a Label=Nop’s_Wanderkarte~[0x1d]88220055
Data0=(47.5945115,6.0054874),(47.5945115,5.3945017), (48.6054897,5.3945017),(48.6054897,6.0054874)
[END]

Man könnte sich nun „einfach“ die benötigten Kacheln von Hand raussuchen und zu einer neuen Karte kompilieren. Der nachfolgende Befehl würde genau das tun:

C:\wrk> gmt -j -f 82,1 -o neueKarte.img -m MeineKleineKarte 88220000.TYP 88220055.IMG 88220057.IMG

Das Prinzip ist damit klar. Da es mir aber zu mühselig war, die benötigten Kacheln händisch zu ermitteln, habe ich dafür das eingangs erwähnte Python Skript geschrieben. Es nutzt die untangle Library für die Behandlung der GPX-Datei (ist ja XML). Diese muss vorher via PIP installiert werden:
[Weitere Infos dazu findest Du hier: https://pythonadventures.wordpress.com/2011/10/30/read-xml-painlessly/]

# Untangle installieren C:\wrk> pip install untangle

Und dann kann es eigentlich auch schon losgehen:

Das Skript erwartet vier Parameter:

  • die zu verwendende GPX-Datei (es muss ein Track(!) sein)
  • den Ablageort der extrahierten Kartenkacheln ( . = „hier in diesem Ordner“)
  • den Dateinamen der kompilierten Karte
  • den Namen der kompilierten Karte. Dieser wird im GPS oder in Mapsource angezeigt

Am Beispiel des GPX-Tracks unserer 2016er Karwendeltour sähe das Ganze dann so aus:

C:\wrk> python mapcut.py Karwendeltour2016.gpx . KarwendelKarte.img MartinsKarwendelkarte processing Track: W Karwendeltraversale Tag 1
processing Track: W Karwendeltraversale Tag 2
processing Track: W Karwendeltraversale Tag 3
processing Track: W Karwendeltraversale Tag 4a
processing Track: W Karwendeltraversale Tag 4b
gmt -j -f 82,1 -o KarwendelKarte.img -m MartinsKarwendelkarte ./*.TYP ./88220344.img ./88220357.img

Schickt man anschließend den generierten Befehl ab, so kommt hinten wirklich eine Karte raus:

C:\wrk> gmt -j -f 82,1 -o KarwendelKarte.img -m MartinsKarwendelkarte ./*.TYP ./88220344.img ./88220357.img
gmt v0.8.220.853b CC BY-SA (C) 2011-2015 AP http://www.gmaptool.eu
Writing: indexes
Writing: data MD2
Writing: data TRF
Writing: data TYP
Writing: data MMR
Writing: maps NT
Writing: maps MPC
Writing: data MPS
Writing: header

Die so erzeugte Karte (hier im Beispiel KarwendelKarte.img) muss für das Garmin Edge 520 noch (zwingend und ohne Gestaltungsspielraum) in gmapbmap.img (und zwar exakt so) umbenannt werden und kann dann über USB in den Ordner \Garmin auf das Gerät kopiert werden. Beim nächsten Start des GPS wird die neue Karte geladen und steht zur Verfügung.