Selbst gestaltete OSM-Karten auf Garmin-Geräten nutzen

Aus LinuxUser 09/2016

Selbst gestaltete OSM-Karten auf Garmin-Geräten nutzen

© Iakov Kalinin, 123RF

Auf eigenen Wegen

OSM-Karten sind mit Garmin-Navis kompatibel. Schwierig gestaltet sich der Import nicht – es bedarf aber einiger Grundlagen, Ausdauer und Erfahrungen.

Eigentlich ist es ganz einfach: Sie laden eine fertige OSM-Karte auf ein GPS-Gerät, und schon stehen die Daten mit allen benötigten Einstellungen für die nächste Wanderung oder Radtour bereit. Die Tabelle “Bezugsquellen für OSM-Karten” führt entsprechende Quellen auf. Einige der Webseiten stellen in wöchentlichem, manche in täglichem Rhythmus aktualisierte Karten für Garmin-Geräte bereit. Meist genügt es, die bereitgestellten komprimierten Images zu laden und ins Verzeichnis Garmin/ auf der Speicherkarte des Navis (nicht im gleichnamigen Verzeichnis auf dem Gerät) zu entpacken.

Für viele Zwecke reicht das vermutlich. Oft stehen dabei aber etliche Features von OpenStreetMap nicht bereit. So bieten vorgefertigte Karten stets nur einen Ausschnitt der verfügbaren Daten. Das ist sinnvoll, um die Karten nicht durch eine Flut an Funktionen unleserlich zu machen. Aber oft fehlen eben jene Daten, die Sie gerne hätten. Außerdem erschweren die Hersteller durch eine Vielzahl von unterschiedlichen Formaten den Einsatz von Karten, Tracks, Routen und anderen Features der Geräte – allerdings gilt das nicht für alle.

Bezugsquellen für OSM-Karten

Quelle URL Typ
Navmaps http://www.navmaps.eu Einzelkarten Europa
Computerteddy http://wiki.openstreetmap.org/wiki/User:Computerteddy Einzelkarten Europa
Openfietsmap http://www.openfietsmap.nl Einzelkarten Europa
Freizeitkarte-OSM http://freizeitkarte-osm.de/ Einzelkarten Europa
Thkukuk http://osm.thkukuk.de Einzelkarten Europa
Alternativas Libres http://mapas.alternativaslibres.es Gesamtkarten Europa
Raumbezug http://www.raumbezug.eu/osm-garmin.htm Gesamtkarten Europa
Wanderreitkarte http://www.wanderreitkarte.de Wander- und Reitkarte

Mkgmap

Das Erstellen Garmin-kompatibler Karten basiert auf einem sehr speziellen Werkzeug namens Mkgmap [1]. Das Java-Programm für die Kommandozeile findet sich in den Repositories vieler Distributionen. Die Software erzeugt Garmin-kompatible Images, die sich direkt für den Einsatz auf den entsprechenden Geräten eignen. Ein Problem beim Entwickeln von Ansichten (“Styles”) stellt die Tatsache dar, dass Mkgmap keine Vorschau auf das Ergebnis liefert: Das ist im Wesentlichen nur direkt auf der Hardware möglich. Ein kleiner Workaround hilft hier aber weiter.

Da das Erstellen der Images und das Kopieren auf die Hardware jeweils einige Zeit benötigt, sollten Sie unbedingt zunächst mit einer kleinen Datei arbeiten, etwa in der Größe eines deutschen Landkreises. Zeigt das Gerät diese Daten in der gewünschten Form an, wagen Sie sich an die nächstgrößere Einheit, etwa ein Bundesland. Um die Zeit für das Kopieren der immer größeren Dateien zu reduzieren, empfiehlt es sich, diese nicht direkt mit dem USB-Kabel auf das Gerät zu kopieren, sondern stattdessen die Speicherkarte im Rechner zu bespielen. Die Prozessoren der meisten GPS-Geräte sind eher schwachbrüstig, was sich auch beim Laden von Tracks und dem Routing zeigt.

Bei alten Garmin-kompatiblen Geräten benötigen Sie eine Image-Datei, die den Namen gmapsupp.img trägt. Eine solche erzeugen Sie mithilfe der Mkgmap-Option --gmapsupp. Modernere Geräte dagegen lesen Image-Dateien unabhängig von deren Namen, solange Sie sie im Verzeichnis Garmin/ speichern. Sie bieten auch die Möglichkeit, unterschiedliche Details der Karten in verschiedenen Images zu speichern und diese gleichzeitig zu verwenden. So nutzen neuere Navis oft eine Datei mit dem Namen gmapdem.img (DEM: Digital Elevation Model) für die Höhenlinien und gmapgc.img für Geocoding-Informationen, also das Zuordnen von Adressen und Koordinaten. Bei den Namen handelt es sich aber lediglich um Konventionen, Sie dürfen sie beliebig wählen.

Es ist grundsätzlich recht einfach, eine Karte für ein Garmin-Gerät zu erzeugen: Zunächst laden Sie die benötigten OSM-Daten und wandeln diese mittels Mkgmap um, wobei Sie die Styles berücksichtigen. Dabei erstellen Sie eventuell mehrere Image-Dateien, die jeweils Teilaspekte der Karte enthalten, wie Höhenlinien, Radrouten, POIs oder Ähnliches. Anschließend kopieren Sie die so erzeugten Images in den Ordner Garmin/ auf dem Gerät. Ein anderer Weg steht Linux-Anwendern derzeit kaum offen (siehe Kasten “Proprietäre Images”).

Proprietäre Images

Bei dem von Garmin für die Image-Dateien verwendeten Format handelt sich um eine Form von VFAT-basierten Disk-Images. Das durch die Datei abgebildete Dateisystem enthält eine Reihen von Teilkarten (für jeden Zoom-Level einen Satz an Kacheln mit den Bildern für diese Auflösung) sowie einige weitere Daten. Die eigentliche Spezifikation gibt Garmin nicht frei [2], das Format wurde bislang nur zum Teil entschlüsselt [3]. Zudem lassen sich die Disk-Images nicht einfach mounten, wodurch sich viele Probleme leichter lösen ließen.

Mkgmap bringt die Option --help=options mit, die wesentliche Informationen zum Programm ausgibt. Die Option --help=Topic fördert für das jeweilige Stichwort zusätzliche Informationen zutage. Die Optionsnamen lassen sich bei Mkgmap nicht abkürzen, Gleichheitszeichen zwischen Option und Werten sind obligatorisch. Von der Vielzahl von Optionen benötigen Sie für die meisten Aufgaben nur eine überschaubare Untermenge (siehe Tabelle “Mkgmap im Griff”).

Mkgmap im Griff

Option Funktion
-c Datei liest die angegebene Datei und interpretiert deren Inhalt zeilenweise als Option=Wert
--output-dir=Ordner schreibt in das angegebene Verzeichnis
--gmapsupp erzeugt oder liest eine Garmin-kompatible Datei
-n Name definiert den Kartennamen
--description=Text beschreibt die Karte und deren Features
--country-name=Land definiert den Landesnamen
--country-abbr=Kürzel definiert das Landeskürzel
--region-name=Region definiert den Namen der Region
--region-abbr=Kürzel definiert das Kürzel der Region
--style-file=Datei liest Styles aus der angegebenen Datei
--list-styles zeigt die verfügbaren Stile an
--check-styles überprüft die verfügbaren Stile
--route erzeugt eine Routing-fähige Karte
--cycle-map erzeugt eine Karte für Radfahrer
--transparent erzeugt eine transparente Teilkarte
--verbose liefert umfangreichere Ausgaben

Karten und Styles

Einen wichtigen Aspekt beim Erstellen der Karten machen die Styles aus. Wie bei Maperitive [4] klassifiziert die Software die Anzeige von Objekten – seien es Punkte, Linien oder Flächen – anhand der Eigenschaften und zeichnet diese anschließend entsprechend. Die Art und Weise, wie dies geschieht, legen die Stile fest. Insbesondere definiert ein Style, ab welcher Vergrößerungsebene ein Objekt in welcher Form erscheint.

Garmin-kompatible Navis arbeiten mit einer Skala von 24 Auflösungsstufen, die Faktoren mit Strecken korreliert. Tatsächlich sind in der Praxis nur die Stufen 16 bis 24 relevant (siehe Tabelle “Auflösung”), deren Zuordnung zudem abhängig vom Gerät etwas variiert. Dem gegenüber stehen die Zoom-Level der Karten. Im Prinzip existieren 17 Abstufungen (0 bis 16), von denen aber nur die Werte 0 (maximale Details) bis 10 (Übersicht) in der Praxis zum Einsatz kommen.

Auflösung

Faktor Strecke
16 30 bis 12 Kilometer
18 8 bis 3 Kilometer
20 2000 bis 800 Meter
22 500 bis 200 Meter
23 300 bis 80 Meter
24 120 bis 50 Meter

Eine interne Tabelle verknüpft Zoom-Level und Auflösung: So entspricht Zoomlevel 0 der Auflösung 24. Welche Level eine Karte berücksichtigt, definieren Sie durch die Option --levels= beim Aufruf von Mkgmap. Eine Karte für Garmin-Navis darf maximal acht Level enthalten. Dazu kommen bis zu acht sogenannte Overview-Level für Übersichten. Eine größere Anzahl an Levels verbessert die Anzeige, geht aber auf Kosten des Speicherplatzes für die Image-Dateien.

Für jeden der Zoomlevel enthält die Datei gmapsupp.img einen eigenen Satz an vorab berechneten Kacheln, die Sie anschließend beim Navigieren sehen. Das erklärt die Größe der Datei, die oft im Gigabyte-Bereich liegt. Da das dem Image zugrundeliegende Dateisystem auf VFAT basiert, gibt es dabei manchmal Probleme, da Dateien hier maximal 4 GByte groß werden dürfen. Das Problem tritt vor allem auf, wenn Sie versuchen, sehr große MBTiles-Dateien [5] zu erzeugen, und diese Kacheln in einer SQLite-Datenbank zusammenfassen. Die angezeigten Kacheln erzeugen Sie übrigens bei Bedarf mit Maperitive und betten diese anschließend ins Disk-Image ein.

Es gibt noch ein zweites Problem, das ebenfalls auf der Größe beziehungsweise den Inhalten von Dateien beruht: Mkgmap kann nur Datensätze einer begrenzten Größe verarbeiten. Daher müssen Sie große Dateien der Typen OSM beziehungsweise PBF vorab splitten. Das gelingt mit dem zweiten Programm der Mkgmap-Suite, dem Splitter [6]. Manuell oder unter Arch Linux installieren Sie das Programm separat, sonst gehört es in der Regel zum Paket mkgmap. Das Programm verrät seine Optionen über --help. Die Pakete aus Arch Linux allerdings enthalten weder eine Dokumentation noch Beispiele, weshalb Sie hier gegebenenfalls auf die Originaldateien zurückgreifen.

Splitter spaltet OSM-Dateien in kleinere Files auf, wobei es versucht, zusammengehörige Regionen zu erhalten. Dabei strebt es außerdem an, Ways und Polygone möglichst vollständig in eine neue Datei zu überführen. Dazu erzeugt das Programm Dateien in unterschiedlichen Größen.

Stilvoll

Ein Satz an Regeln definiert bei Mkgmap analog zu Maperitive, wie ein Gerät Punkt- und Linienobjekte anzeigt. Diese Regeln beschreiben bestimmte Details zeilenweise, so wie die Software sie abarbeitet. Hat das Tool eine Regel angewendet, erfolgt das Bearbeiten des nächsten Objekts. Als Style bezeichnet man normalerweise die Gesamtheit der Regeln, aufgeteilt in mehrere Dateien.

Die von Mkgmap verwendeten Stile fallen recht speziell aus und unterscheiden sich von denen bei Maperitive. Sie bestehen aus mindestens vier, oft aber mehr Dateien in einem Verzeichnis, in denen jeweils spezielle Informationen liegen. Den Verzeichnisnamen dürfen Sie frei wählen. Alternativ akzeptiert Mkgmap gepackte Verzeichnisse oder alle Informationen in einer einzelnen Datei.

Unbedingt notwendig ist eine Datei mit dem Namen version. Sie beschreibt die Version der Beschreibungssprache des Styles, nicht die Version des Styles. Bisher gibt es die Versionen 0 und 1. Nach der Zeile mit der Versionsnummer sollte eine Leerzeile folgen.

Die optionale Datei info enthält Informationen zum Style in der Form Schlüssel=Wert. Zwischen geschweiften Klammern dürfen Sie mehrzeilige Werte angeben. Als Schlüsselwörter stehen version (Style-Version), summary (kurze Beschreibung des Styles) sowie description (ausführliche Beschreibung des Styles) zur Wahl. In der Dokumentation zu Mkgmap finden Sie ein Beispiel.

In der Datei options übergeben Sie Optionen, analog zu denen in der Befehlszeile (siehe Tabelle “Mkgmap im Griff”). Allerdings berücksichtigt die Software hier nur Optionen, die sich auf den Stil beziehen, wie levels, overview-levels und extra-used-tags. Die letzte Angabe dient dazu, zusätzliche Tags anzugeben, die Sie im Stil anwenden möchten; meist ist das nicht erforderlich.

Die Datei points enthält Regeln, nach denen die Software Punkt-Objekte anzeigt. Normalerweise handelt es sich dabei um POIs. Ohne diese Datei erscheinen solche Punkte nicht in der Karte. Die entsprechenden Objekte geben Sie in der folgenden Form an:

Schlüssel=Wert [Zeichennummer resolution Auflösung]

Die Kombination aus Schlüssel und Wert bezeichnet den darzustellenden POI. Mit Zeichennummer geben Sie die interne Nummer des Zeichens an, das Sie verwenden möchten, und Resolution bezeichnet die Auflösung, ab der es erscheint. Ein Beispiel:

amenity=hospital [0x3002 resolution 14]

Normalerweise endet die Datei points mit einer Klausel, die dafür sorgt, dass die Software jedes anzuzeigende Objekt mit einem Icon beziehungsweise Text versieht (Listing 1). Dabei enthält die geladene Datei inc/address Klauseln in der in Listing 2 angegebenen Form. Diese sorgen dafür, dass alle benannten Elemente mit deren Namen versehen erscheinen. Allerdings führt dies in manchen Gebieten zu sehr vielen zusätzlichen Einträgen.

Listing 1

[...]
<finalize>
# The finalizer section is executed for each element when a rule with an element type matches
name=* { name '${name}' }
include 'inc/address';

Listing 2

[...]
mkgmap:phone!=* & phone=* { set mkgmap:phone='${phone}' }
mkgmap:phone!=* & contact:phone=* { add
mkgmap:phone='${contact:phone}' }
mkgmap:is_in!=* & is_in=* { set mkgmap:is_in='${is_in}' }

Analog definiert lines die Anzeige von Linien (“Ways”), polygones die von Flächen. Für Relationen – Grenzen, Routen oder Ähnliches – gibt es entsprechend die Datei relations. In den Quellen von Mkgmap [7] sowie in der Dokumentation [8] und im Style-Handbuch [9] finden sich Beispiele für diese Dateien. Andere Beispiele für Stil-Dateien mit teils interessanten Eigenschaften finden Sie auf Github unter dem Stichwort “mkgmap”. Eine recht interessante Version einer OSM-Karte finden Sie online [10], wobei der Begleittext die Prozedur zum Erzeugen der Karte erläutert [11].

Einige Optionen wie name-tag-list="name:mkgmap,name:de,int_name,name:en,name" funktionieren in der aktuellen Mkgmap-Version nicht mehr in der Options-Datei, sondern nur noch auf der Befehlszeile. Das geänderte Verhalten von (voreingestellten) Optionen kommentiert Mkgmap beim Aufruf. Für eine Reihe von Optionen finden Sie online eine recht gute, aber nicht mehr ganz aktuelle Information [12].

Die Regeln in Mkgmap-Styles folgen einem festgelegten Muster. Sie bestehen aus zwei bis drei Teilen, die Sie durch Leerzeichen oder Zeilenumbrüche aufteilen. Die Tests bestehen im einfachsten Fall aus einem Gleichheits- oder Relationszeichen. Es gibt nur eine kleine Anzahl von Operatoren, die Sie in den Tests einsetzen dürfen (siehe Tabelle “Operatoren für Test”).

Operatoren für Test

Kürzel Bedeutung
Tag=Wert gleich
Tag=* wahr, wenn Tag existiert, unabhängig vom Wert
Tag!=Wert ungleich
Tag!=* wahr, wenn Tag nicht existiert
Tag<Wert kleiner
Tag<=Wert kleiner-gleich
Tag~Regexp Wert entspricht regulärem Ausdruck
!(Regexp) negiert den Ausdruck in Klammern

Mehrere Tests verbinden Sie durch ein Kaufmannsund (&); eine Pipe (|) dient als logisches Oder. Tags, die Leerzeichen enthalten, fassen Sie in einfachen oder doppelten Hochkommata ein. Zwischen geschweiften Klammern eingeschlossen stehen Funktionen, mit denen Sie das Aussehen von Objekten beeinflussen. Dabei trennen Sie die Statements durch Semikola (;). Es gibt nur eine begrenzte Anzahl von Statements – die gleichnamige Tabelle zeigt die wichtigsten.

Statements

Statement Funktion Beispiel
name setzt den Namen (voreingestellt: Tag-Namen) name=* { name '${name}' }
add fügt ein Tag hinzu highway=path {add access = no; add bicycle = yes; add foot = yes}
addlabel setzt ein Label highway=* & ref=* { addlabel '${ref}' }
set überschreibt bestehende Tags {set highway=bridleway; set horse=yes}
delete entfernt Tags highway=no | highway=none {delete highway}
deletealltags entfernt alle Tags (highway=razed | highway=dismantled) {deletealltags}
apply für Relationen, setzt Tags type=route & ( route=hiking | route=foot ) { apply { set route=hiking; }}

Garmin-Geräte verfügen über einen eingebauten Satz an Icons zum Markieren von POIs und für Linien. Eine spezielle Variante von OSM-Karten – erzeugt durch den User Computerteddy [13] – versucht möglichst viele Features von OSM für ältere Navis bereitzustellen. Bei neueren Geräten definieren Sie zusätzliche Icons über ein sogenanntes TYP-File [14]. Mkgmap ist seit einiger Zeit in der Lage, diese Files vollautomatisch aus speziellen Quelltexten zu erzeugen. Sobald Sie beim Aufruf des Programms zum Erzeugen einer Image-Datei eine entsprechende TXT-Datei mit angeben, übersetzt Mkgmap auch diese:

$ mkgmap [...] map.osm TYP-File.TXT [...]

Der Aufruf erzeugt automatisch die Datei TYP-File.TYP. Kopieren Sie diese zusammen mit den Image-Dateien auf das Navi in den Ordner Garmin/, verwenden die Geräte die neuen Icons.

Mkgmap ist in der Lage, einige Eigenschaften von Stilen schnell zu testen (--check-styles). Zuvor sollten Sie sich aber mittels --list-styles vergewissern, welche Styles die Applikation findet. Durch --style-file=Stil wählen Sie den gewünschten Stil aus. Ohne diese Angabe testet das Programm alle gefundenen Stile. Beide Kommandos melden idealerweise Number of MapFailedExceptions: 0 und Number of ExitExceptions: 0.

Nach dem Umsetzen einer OSM-Datei durch Mkgmap testen Sie (wenn auch nur sehr begrenzt) die so erzeugte Datei mittels QLandkarte. Das Programm lädt die Image-Dateien zwar nicht direkt, aber über den Umweg einer TDB-Datei. Diese erzeugt Mkgmap ebenfalls auf Anfrage, bei der oben gezeigten Datei options aktiviert das beispielsweise tdbfile=yes. Ansonsten nutzen Sie folgenden Befehl:

$ mkgmap --tdbfile gmapsupp.img

Zwei Optionen unterstützen die korrekte Darstellung von Grenzen und Küstenlinien. Mit --bounds=bounds.zip erhalten Sie genaue Angaben zu Grenzen [15], durch --precom-sea=sea.zip präzise Küstenlinien [16]. Beide Optionen hängen Sie beim Erzeugen der Image-Dateien einfach an die Befehlszeile.

Karte erstellen

Wie Sie die Rohdaten am besten besorgen, hängt von Ihren Ansprüchen und Möglichkeiten ab. In vielen Fällen genügen die vorbereiteten Rohdaten der Geofabrik [17]. Sie laden diese entweder als XML-Datei mit der Extension .osm oder als komprimierte Variante, dann normalerweise im Protocolbuffer Binary Format PBF [18].

Je nach Region weisen diese Dateien eine Größe von einigen Hundert MByte bis einigen GByte auf. Sie spalten die Dateien daher so auf, dass möglichst entlang von zusammengehörenden Strukturen Teile entstehen (Listing 3, Zeile 1). Dabei entsteht eine Datei mit dem Namen template.args, in der Sie unter anderem eine family-id und den Kartennamen festlegen (Listing 4). Diese Datei sollten Sie später beim Aufruf von Mkgmap verwenden, um wichtige Voreinstellungen zu setzen.

Listing 3

$ java -Xmx1024m -jar splitter.jar --output=pbf --output-dir=splitter --max-nodes=1400000 --mapid=10010001  --poly-file=germany.poly  europe.osm.pbf
$ java -Xmx2048M -jar mkgmap  --name-tag-list="name:de,name,int_name" --tdbfile --style-file=Style-Datei --remove-short-arcs --route --net  -c template.args *.pbf *.osm *.TYP

Listing 4

# This file can be given to mkgmap using the -c option
# Please edit it first to add a description of each map.
#
# You can set the family id for the map
family-id: 7777
product-id: 1
# Following is a list of map tiles.  Add a suitable description
# for each one.
mapname: 63240001
# description: OSM Map
input-file: 63240001.osm.pbf
[...]

Anschließend kompilieren Sie die aufgeteilten PBF- respektive OSM-Files mittels Mkgmap, wie oben gezeigt. Liegen Ihnen Quelltexte für ein Typ-File (*.TXT) vor, dann hängen Sie diese an die Liste der Eingabedateien an. Damit das Garmin-Gerät die TYP-Datei als zur Karte gehörig erkennt, müssen die IDs – hier die Family- und die Product-ID – zusammenpassen. Das erfordert, beim Übersetzen der Quelltexte von TYP-Files und Karte die Option --family-ID=Nummer mit anzugeben.

Bei Erzeugen von Karten aus gesplitteten OSM-Daten liegt die Datei template.args schon vor, die Sie mit -c template.args in der Befehlszeile einbinden (Listing 3, Zeile 2).

Fazit

Es gibt eine ganze Reihe von Möglichkeiten, Karten für Garmin-Geräte unter Linux zu erstellen. Die von Garmin bereitgestellten Programme lassen sich jedoch nur mittels Wine verwenden, was nicht wirklich gut funktioniert. Mkgmap bietet hier mit dem Splitter und dem inzwischen eingebauten TYP-File-Compiler eine wirklich leistungsfähige Basis für das Erstellen eigener Karten.

Bei der Arbeit mit Mkgmap zeigen sich zwei Hauptprobleme, der fast völlige Mangel an aussagekräftigen Fehlermeldungen und die fehlende Vorschau. Dass die Navis selbst keine Fehlermeldungen erzeugen – bei Problemen stürzen sie beim Laden der Map einfach ab – erschwert das Beheben von Fehlern zusätzlich. 

Glossar

POIs

Points of Interest. Dabei handelt es sich je nach Zielsetzung um Gebäude (Tankstellen, Geschäfte, Museen, etc.) oder um landschaftlich signifikante Punkte.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 09/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben