Ubuntu 12.10 „Quantal Quetzal“
Ubuntu 12.04 „Precise Pangolin“
Ubuntu 11.10 „Oneiric Ocelot“
Ubuntu 10.04 „Lucid Lynx“
Mkgmap
ist eine Anwendung, mit der Kartenmaterial für Navigationsgeräte der Firma
Garmin
aus Daten des Projekts Open StreetMap (OSM) erstellt werden kann. Die Karten-Rohdaten können kostenfrei aus dem OSM Projekt
heruntergeladen werden.
Mkgmap benötigt Java. Für diesen Artikel wurde OpenJDK verwendet. Java ist in den Paketquellen vorhanden. Hinweise dazu finden sich im dazugehörigen Artikel.
Mkgmap über die Paketverwaltung installieren. Hierzu ist ein Paket erforderlich [1]:
mkgmap (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install mkgmap
sudo aptitude install mkgmap
Die manuelle Installation bietet immer die neuste Version von Mkgmap. Die Nutzung im weiteren Verlauf des Artikels bezieht sich auf eine manuelle Installation.
Die Datei mkgmap-rVERSIONSNUMMER.tar.gz
herunterladen und nach ~/Dokumente/mkgmap/ entpacken [5].
Um mit Mkgmap zu arbeiten, werden OSM Kartendaten benötigt. Diese werden von Mkgmap zur Datei gmapsupp.img verarbeitet, da Garmin-Geräte eine Datei mit diesem Namen benötigen. Während der Vorbereitung kann der Name der Datei geändert werden, z.B. in data.osm.
Bei der Verwendung des Kartenmaterials über eine SD- bzw. MicroSD-Karte bleibt die interne Karte immer erhalten. Ältere Garmin Geräte können - je nach verwendeter Firmware - nur Karten von max. 2 GiB nutzen, neuere Geräte dagegen 4 GiB. Darauf ist beim Erstellen der Karten zu achten.
OSM Kartenmaterial kann auf verschiedene Arten beschafft werden. Einfach ist der Download über den Geofabrik Downloadbereich . Das Verzeichnis osm/ öffnen und die entsprechende Datei suchen, z.B. osm/europe/germany/sachsen-anhalt.osm.bz2 für Sachsen-Anhalt. Nach dem Herunterladen und Entpacken [2] kann man die Datei umbenennen, was das Arbeiten mit Mkgmap vereinfacht, beispielsweise in ~/Dokumente/mkgmap/ data.osm. Die Dateigröße darf 500 MiB nicht übersteigen, da Mkgmap (noch) nicht mehr verarbeitet. Sollen größere Dateien verarbeitet werden, ist ein Splitter notwendig.
Für eine Deutschlandkarte benötigt Mkgmap ca. 7 GiB freien Speicherplatz zur Verarbeitung.
Um Mkgmap zu starten [4], einfach in das Installationsverzeichnis wechseln. Das Verzeichnis richtet sich nach der Art der Installation. Im folgenden Beispiel liegt Mkgmap im Homeverzeichnis unter ~/Dokumente/mkgmap. Hierzu ein Terminal-Fenster [5] öffnen und in das Verzeichnis wechseln.
cd Dokumente/mkgmap
Jetzt ist das Verzeichnis geöffnet. Hier können jetzt die Befehle für Mkgmap eingegeben werden.
java -jar mkgmap.jar --route --gmapsupp data.osm
Erstellt wird eine Datei, mit dem Namen 63240001.img und eine fertige gmapsupp.img. Diese enthält die Daten für Ländererkennung, Postleitzahl, Städten und Straßen.
Die fertige Datei gmapsupp.img kann in Garmin Geräten verwendet werden.
Nicht die interne Datei gmapsupp.img überschreiben! Immer die Datei gmapsupp.img auf einer SD-/MicroSD-Karte verwenden.
Viele verschiedene Optionen finden sich auch im WIKI Befehle für Mkgmap .
Dieser Befehl ruft im Verzeichnis ~/Dokumente/mkgmap die Hilfe auf:
java -jar mkgmap.jar --help
Wenn mit Mkgmap größere Dateien größer als 500 MB verarbeitet werden sollen, ist ein Splitter nötig. Den Splitter splitter-rVersionsnummer.tar.gz in das Verzeichnis Downloads herunterladen. Die aktuelle Version ist in der Datei splitter-r200.tar.gz
enthalten. Diese im Verzeichnis Downloads entpacken [5]. Anschließend in den Ordner splitter-r200 wechseln und mit einem
Doppelklick die Datei splitter-rVersionsnummer öffnen. Im Register " Bearbeiten -> Alles auswählen" benutzen. Nun mit einem
Klick auf "Bearbeiten -> Kopieren" die Dateien in die Zwischenablage kopieren. Jetzt das Verzeichnis Dokumente/mkgmap öffnen und hier die Dateien mit einem
Klick auf "Bearbeiten -> Einfügen" einfügen.
Es öffnet sich ein Fenster, in dem Ersetzen bzw. Zusammenfügen mit einem Klick bestätigt wird.
Jetzt ist der Splitter im Verzeichnis Dokumente/mkgmap wie er benutzt werden kann. Anschließend kann man unter ~/Downloads den Ordner splitter-rVersionsnummer und das Archiv splitter-rVersionsnummer.tar.gz löschen.
Herunterladen einer Karte von der Geofabrik. Z.B. Germany osm/europe/germany.osm.pbf Geofabrik Downloadbereich
. Nach dem Download die Datei germany.osm.pbf in das Verzeichnis Dokumente/mkgmap ablegen und in dieses wechseln. Dort den Befehl zum Splitten eingeben, mit der Option
-Xmx????m
(Größe des zu verwendenden Arbeitsspeichers in MiB):
java -Xmx1024m -jar splitter.jar --output=xml germany.osm.pbf
Die Ausgabe wird etwas länger dauern, was von der Kartengröße und dem vorhandenen RAM-Speicher abhängig ist:
Map is being split for resolution 13: - area boundaries are aligned to 0x800 map units - areas are multiples of 0x1000 map units wide and high Processing germany.osm.pbf Bounding box 5.864417 47.26543 15.050780000000001 55.14777 10.000.000 nodes processed... id=286376477 20.000.000 nodes processed... id=359867782 30.000.000 nodes processed... id=507089514 40.000.000 nodes processed... id=713665626 50.000.000 nodes processed... id=1019306236 60.000.000 nodes processed... id=1139567995 70.000.000 nodes processed... id=1283080364 ...
Nach Beendigung des Splittens steht in der letzten Zeile die Dauer der Verarbeitung und die Daten.
Beispiel für die Datei germany.osm.pbf:
AP occupancy: 87462424 MAP occupancy: 21418673 MAP occupancy: 2515377 MAP occupancy: 271844 ways occupancy MAP occupancy: 12875351 MAP occupancy: 3332938 MAP occupancy: 415469 MAP occupancy: 45812 MAP occupancy: 63 MAP occupancy: 4 MAP occupancy: 1 Thread worker-0 has finished Elapsed time: 4h 22m 35s Memory: Current 1933MB (1265MB used, 668MB free) Max 1933MB Time finished: Mon Dec 05 12:50:55 CET 2011 Total time taken: 15813s marko@marko-desktop:~/Dokumente/mkgmap$
Solange der Splitter läuft, lässt sich das Terminal nicht schließen. Es zeigt die Meldung:
Prozess läuft noch.
Nach dem Splitten der germany.osm.pbf die Dateien mit folgendem Befehl, für die Verwendung mit 2 GB Arbeitsspeicher:
java -Xmx2000m -jar mkgmap.jar --remove-short-arcs --levels=0:24,1:22,2:21,3:19,4:18,5:16 --route --add-pois-to-areas --latin1 --lower-case --gmapsupp --net -c template.args
zu einer Karte verarbeiten
Die kompletten Optionen von Mkgmap sind im OSM-Wiki - Optionen zu finden.
Mkgmap erstellt ein osmmap.tdb und eine osmmap.img. Mit diesen beiden Dateien kann die Karte mit QLandkarteGT geöffnet werden. Die geöffnete Karte (Kacheln) markieren und an das Garmin Gerät / Kartenleser übertragen.
Zu empfehlen ist die Übertragung der Datei gmapsupp.img mittels eines Kartenlesers, da es wg. der Übertragungsrate von USB 1.1, zu erheblichen Wartezeiten kommen kann.
Mkgmap erstellt auch eine gmapsupp.img. Diese kann einfach auf eine SD/MicroSD Karte kopiert werden.
Um den Adressindex nutzen zu können, wird ein weiteres Verzeichnis bounds im Verzeichnis Dokumente/mkgmap benötigt. In dieses Verzeichnis bounds die Bounds Daten kopieren. Die Bounds Daten werden regelmäßig aktualisiert. Die Bounds Datei boundaries (by WanMil) hier herunterladen: Bounds
Die European boundaries (by WanMil) in das Verzeichnis bounds entpacken[2]. Im Verzeichnis bounds dürfen sich dann nur .bnd Dateien befinden. Den Befehl für Mkgmap um "--bounds=bounds --index
" erweitern, z.B. für die germany.osm.pbf:
java -Xmx2000m -jar mkgmap.jar --remove-short-arcs --index --location-autofill=bounds,is_in,nearest --levels=0:24,1:22,2:21,3:19,4:18,5:16 --route --add-pois-to-areas --latin1 --lower-case --gmapsupp --net -c template.args
Die Suche erfolgt aktuell schon über die Adresseingabe.
Um die Datei bounds selbst aktuell zu erstellen, sind weitere Schritte nötig. Ein bereits vorhandenes Verzeichnis bounds im Verzeichnis Dokumente/mkgmap löschen.
Das Programm osmconvert (Programmdatei für linux 32 bit) von OSM herunterladen und Ausführrechte [9] für die Datei osmconvert32 vergeben. Anschließend die Datei in das Verzeichnis ~/Dokumente/mkgmap/ verschieben.
Das Programm osmfilter32 herunterladen. Es wird ebenfalls die Programmdatei für linux 32bit von OSM heruntergeladen. Ebenfalls für osmfilter32 Ausführrechte [9] setzen und die Datei anschließend nach ~/Dokumente/mkgmap/ verschieben.
Die Benutzung ist nach dem Herunterladen des Kartenmaterials sehr einfach. Als Beispiel dient wieder die Datei germany.osm.pbf.
Alle Befehle werden nacheinander im Verzeichnis Dokumnete/mkgmap ausgeführt.
Hierzu die folgenden Befehle eingeben:
cd Dokumente/mkgmap # wechsel in das Verzeichnis Dokumnete/mkgmap ./osmconvert32 germany.osm.pbf --out-o5m >germany.o5m # germany.o5m wird erstellt ./osmfilter32 germany.o5m --keep-nodes= --keep-ways-relations="boundary=administrative =postal_code postal_code=">germany-boundaries.osm # germany-boundaries.osm wird erstellt java -cp mkgmap.jar uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryPreprocessor germany-boundaries.osm bounds # Dieser erstellt das Verzeichnis bounds mit den darin enthaltenen Grenzdateien, Städten, Straßen und Hausnummern.
Der Inhalt, die .bnd-Dateien, können nicht geöffnet werden sie sind nur zur Weiterverarbeitung gedacht.
Um einen anderen Style als den Mkgmapstyle zu bekommen, ein weiteres Verzeichnis z.B. name im Verzeichnis mkgmap anlegen. Ebenso benötigt man die Datei z.B. name.TYP dazu. Es gibt viele fertige Styles, hier als Beispiel der All-in-one (AIO) Style . Die Datei name.TYP muss mit dem Verzeichnis name inhaltlich übereinstimmmen.
Im Verzeichnis z.B. name befinden sich 7 Dokumente mit den Namen info, lines, options, points, polygons, relations und version. Diese erstellten Dokumente mit einem Editor [6] bearbeiten.
Im Mkgmap Befehl ist Folgendes dazugekommen: --style-file=name /name.TYP
java -Xmx1024m -jar mkgmap.jar --remove-short-arcs --route --latin1 --style-file=name --gmapsupp --net -c template.args name.TYP
Der Prozess ist abgeschlossen mit der Meldung:
Time started: Thu Nov 01 19:08:00 CET 2012 Time finished: Thu Nov 01 20:30:56 CET 2012 Total time taken: 4975445ms marko@marko-desktop:~/Dokumente/mkgmaptest$
Achtung auf keinen Fall die interne gmapsupp.img überschreiben. Aus Sicherheitsgründen vorher ein Backup des Garmin Gerätes durchführen.
Eine z.B. 8 GB große SD bzw. Micro-SD Karte formatieren und auf dieser Karte ein Verzeichnis Garmin erstellen. Die fertige Datei gmapsupp.img in das Verzeichnis Garmin kopieren. Die Karte in das ausgeschaltete Garmin Gerät einstecken und das Gerät einschalten.
Nach der Anzeige "Karten laden" läuft kurz ein Balken voll und die Karte ist erkannt und wird verwendet. Es ist angeraten, zur Übertragung einen Kartenleser zu nutzen und nicht die USB Schnittstelle des Garmin Gerätes, da es sonst zu erheblichen Wartezeiten kommen kann.
Ältere Garmin Geräte können nur Dateien bis 2 GB verarbeiten, neuere dagegen bis 4 GB.
Die Karte kann im Garmin Gerät unter "Einstellungen" aktiviert oder deaktiviert werden.
Der Mkgmap Befehl für die Kartenerstellung ist dann wie folgt:
java -Xmx2000m -jar mkgmap.jar --remove-short-arcs --preserve-element-order --bounds=bounds --index --levels=0:24,1:22,2:21,3:19,4:18,5:16 --route --code-page=1250 --latin1 --add-pois-to-lines --add-pois-to-areas --style-file=lkw --gmapsupp --location-autofill:bounds --family-id=4 --product-id=45 --tdbfile --family-name=Meine-Karte --net -c template.args
Um die Karte mit MapSource zu übertragen, werden diverse Programme benötigt, die man mit Wine [7] ausführt.
Fremdsoftware kann das System gefährden.
Um die Karte mit MapSource zu übertragen wird MapSource benötigt: MapSource.exe
Oder eine weitere Version: Mapsource_6137.exe
Um die Karte in MapSource einzubinden, wird MapSetToolKit benötigt: MapSetToolKit.exe (32-Bit) oder MapSetToolKit_v1.75.zip
(64-Bit)
MapSetToolKit läuft ebenfalls unter Wine.
Und das Paket unrar
unrar (multiverse)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install unrar
sudo aptitude install unrar
Es folgen dann noch weitere Schritt, die bei MapSource Version 6.13.7 ausgeführt werden müssen:
unzip MapSource_6137.exe
wine msiexec /i MAIN.msi
wine Setup.exe
Mapsource wird dann nur starten, wenn mit MapSetToolKit eine OSM Karte installiert wurde.
Um den Kartenleser für MapSource nutzen zu können, ist die Konfiguration von Wine erforderlich. Als erstes ein Terminal öffnen und folgenden Befehl eingeben und die Entertaste drücken:
Befehl zum erstellen eines symbolischen Links auf den Kartenleser:
ln -s /dev/ttyUSB0 .wine/dosdevices/com1
Auf der Karte ist nun eine Datei .windows-serial, die Wine benötigt. Diese Datei nicht löschen!
Im 2. Schritt in der Dash-Startseite unter Suche Konfiguriere Wine eingeben. Das Konfigurationsfenster von Wine öffnet sich, im Register "Laufwerke" wählen.
Beispiel für ein Kartenleser:
I: /media/F47E-1901/
Unter 12.10 ist befindet sich die Verbindung hier:
I: /run/media/Rechnername/F47E-1901/
Nun den Laufwerksbuchstaben anklicken, um ihn zu markieren. In der Zeile Pfad ist der Pfad ersichtlich, nun darunter Erweitert wählen. In der Zeile Typ Diskette auswählen und abschließend unten mit Anwenden verlassen.
Um den Kartenleser auch nach einem Neustart des Computers zu nutzen, die Datei etc/rc.local mit Root-Rechten bearbeiten. Eine weitere Zeile nach exit 0 einfügen:
exit 0 ln -s /dev/ttyUSB0 .wine/dosdevices/com1
Um die Karte in MapSource einzubinden, diese Anleitung nutzen: Karte_einbinden.pdf
Zum Übertragen mit MapSource wird folgende Version benötigt: MapSource_6163.exe
Zuerst mit MapSetToolKit die Karte einbinden, wie in der Anleitung beschrieben. Im zweiten Schritt MapSource starten, Hierbei ist keine Installation erforderlich, MapSource wird sofort geöffnet und die Karte kann übertragen werden.
Im MapSource muss das Häkchen unten links bei "Include route calculation data" gesetzt werden!
Nachdem die erstellte Karte verwendet wird, sollten folgende Verzeichnisse/Dateien im Verzeichnis Dokumente/mkgmap gelöscht werden. Nach dem Löschen kann erneut eine aktuelle Karte erstellt werden.
Löschen von: .args / .img / .osm.gz / .tdb / .list / .o5m / .osm.pbf / .osm / mdr.img / .mdx / bounds
Um eine grenzüberschreitende, routable Mehrländerkarte zu erstellen, wird Osmosis benötigt. Osmosis als osmosis-latest.tgz herunterladen: Letzte stabile Version .
Entpacken nach ~/Dokumente. Nach dem Entpacken das Verzeichnis umbenennen in osmosis. Im Verzeichnis osmosis liegt das Unterverzeichnis bin. Die darin enthaltene Datei osmosis einmalig ausführbar machen.
OSM Kartenmaterial kann auf verschiedene Arten beschafft werden. Einfach ist der Download über den Geofabrik Downloadbereich . Dort das Verzeichnis osm/ öffnen und die entsprechende Datei suchen. Die Datei europe.osm.pbf in das Verzeichnis osmosis speichern.
Nun die gewünschte Länderzusammenstellung erstellen, z.B. Deutschland, Dänemark, Beneluxländer. Es werden die Länderabkürzungen genutzt, z.B. für
Deutschland de
, für Dänemark dk
, für Benelux benelux
usw. Die Koordinaten auslesen und in den Befehl einfügen. Hierzu in das Verzeichnis osmosis wechseln:
cd Dokumente/osmosis
Karte als .osm.pbf erstellen mit folgendem Befehl:
bin/osmosis --read-pbf europe.osm.pbf --bb left=2.5 right=15.0 bottom=47.3 top=57.8 --write-pbf dkdebenelux.osm.pbf
Die erstellte Datei dkdebenelux.osm.pbf in das Verzeichnis ~/Dokumente/mkgmap legen und bearbeiten wie oben beschrieben: Der Splitter.
Als Beispiel ein Befehl für eine routingfähige Mehrländerkarte von Dänemark und Deutschland zusammen. Dazu gehören auch die Grenzgebiete. Die Größe wird ca. 1,5 GB betragen.
bin/osmosis --read-pbf europe.osm.pbf --bb left=5.7 right=15.3 bottom=47.2 top=57.8 --write-pbf d-dk.osm.pbf
Warnungen im Terminal können ignoriert werden.
Es kann auch eine Mehrländerkarte mit einer selbst erstellten Datei, z.B. d-dk.poly, aus der Datei europe.osm.pbf ausgeschnitten werden, damit die Karte nicht zu groß wird. Eine .poly-Datei kann einfach über JOSM erstellt werden.
Der Befehl wird im Verzeichnis osmosis ausgeführt und lautet:
bin/osmosis --read-pbf europe.osm.pbf --bounding-polygon file="d-dk.poly" --write-pbf file="d-dk.osm.pbf"
Dazu gehöriger Befehl für den Splitter:
java -Xmx2000m -jar splitter.jar --output=xml d-dk.osm.pbf
Auf der OSM Karte sind beim Heranzoomen viele Informationen verfügbar, wie z.B. Bäcker/Einkaufen/Bistros/Autowerkstätten/Supermärkte uvm. Dies hat viele Vorzüge, für die sich das Mithelfen lohnt.
Fertige Karten als gmapsupp.img, die man direkt auf die SD bzw. Micro-SD Karte kopieren kann:
Bereits erstellte gmapsupp.img-Dateien können mit dem Kommandozeilenwerkzeug Gmaptool
für Linux zu einer Datei gmapsupp.img zusammengefasst werden.
Zusammengelegte Karten sind nicht grenzüberschreitend routingfähig!
Mit dem Map composer kann man mit Mkgmap auch unter einer graphischen Benutzeroberfläche arbeiten.