DE:OsmAndMapCreator
OsmAndMapCreator ist ein Open-Source Java-Hilfsprogramm für OsmAnd. Es kann Kacheln von Mapnik herunterladen und OSM-Dateien (.osm, .bz2, .pbf) nach POIs, Adressen und ÖPNV-Routen indizieren. Besonders hervorzuheben ist die Fähigkeit, OBF-Dateien aus OSM-Dateien zu erzeugen. Diese OBF-Dateien sind die Grundlage für Offline-Karten und Offline-Routenberechnung auf dem Smartphone.
Anmerkung des Verfassers: Dieser Text ist geschrieben, dass ihn auch Laien verstehen. Deshalb ist er an manchen Stellen etwas (zu) ausführlich und mag für manchen Freak auch nach einer Anleitung für DAUs klingen.
Ablauf der Kartenerstellung
Die Erstellung der OBF-Dateien läuft wie folgt ab:
- Lade einen Auszug (auch Extrakt genannt) aus der OpenStreetMap-Datenbank im PBF-Format bei der Geofabrik für das gewünschte Gebiet herunter. Beachte bei der Größe des Gebiets den hohen Arbeitsspeicherbedarf von OsmAndMapCreator (siehe unten).
- Falls der Extrakt zu groß ist, musst du aus ihm mit Osmconvert einen kleineren Ausschnitt ausschneiden.
- Erzeuge mit OsmAndMapCreator die OBF-Datei.
- Kopiere die OBF-Datei auf dein Smartphone.
OsmAndMapCreator herunterladen
OsmAndMapCreator benötigt keinen besonderen Installationsprozess. Zum Ausführen benötigt man keine Root- bzw. Admin-Rechte, es muss nur Java (Windows) oder OpenJDK (Linux, OSX, mindestens in Version 7) installiert sein. Wenn man nicht weiß, ob man Java installiert hat, öffnet man eine Kommandozeile und führt den Befehl java aus. Wenn die Ausgabe ausführlich diverse Optionen zum Programmstart beschreibt und nicht ein einfaches "Programm nicht gefunden" präsentiert, ist Java installiert.
OsmAndMapCreator findet man auf der Webseite der Entwickler. Dort kann man die neuste OsmAndMapCreator-main.zip herunterladen. Sollte diese Version jedoch fehlerbehaftet sein, dann empfiehlt es sich eine ältere aber stabile Version herunterzuladen. Den Download entpackt man nun an einem beliebigen Ort. Unter unixoiden Betriebssystemen (Linux, OSX) muss man die .sh-Datei noch ausführbar machen.
Erzeugung einzelner OBF-Dateien mit der grafischen Benutzeroberfläche
Um OsmAndMapCreator zu starten ist ein Doppelklick auf die .jar-Datei nicht der richtige Weg. Damit das Programm nicht aus Speichermangel abstürzt, sollte man ihm mehr Speicherplatz (im RAM) als üblich zuweisen.
- Leute mit Kommandozeilenerfahrung: Man öffnet eine Kommandozeile, wechselt mit cd in das Verzeichnis, in dem OsmAndMapCreator.jar liegt und führt den Befehl java -jar -Xms1G -Xmx6G OsmAndMapCreator.jar aus. Die Zahlen bei -Xms und -Xmx geben den zugewiesenen Arbeitsspeicher an (in diesem Beispiel 1 GB bis 6 GB). M ist die Abkürzung für Megabyte, G für Gigabyte. Die Menge ist vom zur Verfügung stehenden Arbeitsspeicher und der Größe der .pbf-Datei abhängig, Details siehe unten.
- Leute ohne Kommandozeilenerfahung: Man startet einen Dateimanager (Windows Explorer, Nautilus o.ä.), wechselt in den Ordner, in dem OsmAndMapCreator.jar liegt und klickt dort doppelt auf OsmAndMapCreator.bat (Windows) bzw. OsmAndMapCreator.sh (OSX, Linux usw.). Die .bat- bzw. .sh-Datei startet OsmAndMapCreator und weist ihm wie der obige Kommandozeilenbefehl einen angegebene Speichermenge zu. Die Speichermenge kann/sollte man in der .bat- bzw. .sh-Datei ändern, Details dazu siehe unten.
Nach dem Start von OsmAndMapCreator klickst du auf Datei, dann auf Erstelle .obf von OSM-Datei und wählst die heruntergeladene und ggf. ausgeschnittene PBF-Datei aus. Warte nun bis das OsmAndMapCreator fertig ist. Wenn du noch ein zweite Karte erstellen willst, solltest du OsmAndMapCreator neu starten, damit es den genutzen Arbeitsspeicher frei gibt.
Regelmäßige Erzeugung von OBF-Dateien (über die Kommandozeile)
Wer des Öfteren OBF-Dateien erstellt, wird oft das Bedürfnis haben, diesen Prozess zu automatisieren. Auch wenn es auf den ersten Blick nicht so scheint, OBF-Dateien kann man auch über die Kommandozeile und somit per Cronjob erstellen.
Unter Debian-artigen Linux-Distributionen benötig man noch das Paket libcommons-logging-java. (andere Distributionen wurden nicht getestet)
Der Arbeitsablauf ist folgender:
- Rohdaten (z.B. bei der Geofabrik herunterladen) oder bestehende Extrakte mit mit Osmconvert oder Osmosis aktualisieren.
- Rohdaten ggf. zuschneiden.
- Rohdaten so umbenennen, dass sie die Endung .osm.pbf haben und nach /home/$user/mapbuild/osmand-pbf verschieben.
- OsmAndMapCreator starten, alle Extrakte werden in OBF konvertiert und in /home/$user/mapbuild/osmand-obf gespeichert.
Wer andere Pfade als die obigen verwendet, muss diese in der batch.xml entsprechend ändern (siehe unten).
Batch.xml
Bevor man OsmAndMapCreator über die Kommandozeile startet, passt man die Einstellungen in der Datei batch.xml im OsmAndMapCreator-Verzeichnis an.
Muster-Datei
$user vorher durch den Benutzernamen (lokal) ersetzen.
<?xml version="1.0" encoding="utf-8"?> <batch_process> <process_attributes mapZooms="" renderingTypesFile="" zoomWaySmoothness="" osmDbDialect="sqlite" mapDbDialect="sqlite" /> <process directory_for_osm_files="/home/$user/mapbuild/osmand-pbf" directory_for_index_files="/home/$user/mapbuild/osmand-obf" directory_for_generation="/home/$user/mapbuild/osmand-gen" skipExistingIndexesAt="/home/$user/mapbuild/osmand" indexPOI="true" indexRouting="true" indexMap="true" indexTransport="true" indexAddress="true"/> </batch_process>
Einstellungen in der batch.xml
Mit den Attributen des Tags process_attributes werden Einstellungen für die Erzeugung einer OBF-Datei angegeben. Mit den Attributen der obigen Musterdatei kann man i.d.R. gut arbeiten.
Wer sehr viel Arbeitsspeicher zur Verfügung hat, kann die temporären SQLite-Datenbanken auch im Arbeitsspeicher statt im Arbeitsverzeichnis auf der Festplatte/SSD (siehe Attribut directory_for_generation in batch.xml) speichern. Das beschleunigt die Erstellung der OBF-Dateien um 10 bis 50 %. Bei zu wenig Arbeitsspeicher nützt ein Speichern der SQLite-Datenbanken im Arbeitsspeichern jedoch nichts, da das System dann swappt. Um die SQLite-Datenbanken im Arbeitsspeicher zu halten, statt auf der Festplatte/SSD zu speichern, ersetze man in der batch.xml
<process_attributes mapZooms="" renderingTypesFile="" zoomWaySmoothness="" osmDbDialect="sqlite" mapDbDialect="sqlite" />
durch
<process_attributes mapZooms="" renderingTypesFile="" zoomWaySmoothness=""
osmDbDialect="sqlite_in_memory" mapDbDialect="sqlite_in_memory"/>
Achtung! Für ein Land wie Baden-Württemberg (230 MB) sollte man dann mindestens 12 GB Arbeitsspeicher haben.
Die weiteren Einstellmöglichkeiten in der batch.xml sind:
Schlüssel | Wert |
---|---|
directory_for_osm_files | Verzeichnis, in dem die heruntergeladenen und ggf. zugeschnittenen PBF-Dateien liegen |
directory_for_index_files | Verzeichnis, in dem die fertigen OBF-Dateien abgelegt werden |
directory_for_generation | Verzeichnis, in dem die SQLite-Datenbanken zwischengespeichert werden |
indexPOI | POI-Index erstellen für POI-Suche (true/false) |
indexRouting | Routing-Index erstellen für Routenberechnung (true/false) |
indexMap | Karten-Index für Rendering (Kartendarstellung) erstellen (true/false) |
indexTransport | Index für Öffentlichen Personennahverkehr erstellen (true/false) |
indexAddresses | Adress-Index erstellen für Adresssuche (true/false) |
Erzeugung starten
OsmAndMapCreator findet die PBF-Dateien, die konvertiert werden sollen nur, wenn sie nach dem Schema LAND.osm.pbf benannt sind und im directory_for_osm_files liegen! Um die OsmAndMapCreator zu starten, wechselt man in das Verzeichnis, in dem OsmAndMapCreator liegt (dorthin, wo das ZIP-Archiv entpackt wurde) und führt folgenden Befehl aus (Speicherzuweisung ggf. anpassen):
java -Djava.util.logging.config.file=logging.properties -Xms64M -Xmx6300M -cp "./OsmAndMapCreator.jar:lib/OsmAnd-core.jar:./lib/*.jar" net.osmand.util.IndexBatchCreator batch.xml
Speicherbedarf
Speicherverbrauch
OsmAndMapCreator benötigt ein vielfaches an Arbeitsspeicher gegenüber der Größer der .pbf-Datei. Man sollte OsmAndMapCreator nur dann größere Gebiete rechnen lassen, wenn der Computer genügend Arbeitsspeicher hat. Dabei sollte man berücksichtigen, dass das Betriebssystem selbst auch noch etwas Platz benötigt. Dazu schaut man einfach mal im Leerlauf im Task-Manager nach dem Speicherverbrauch. Bedenke, dass ein Programm auf einem 32-Bit-System nur max. 4 GB RAM nutzen kann.
Die folgende Tabelle listet beispielhaft einige Dateigrößen und Speicherverbräuche auf. Bitte beachte, dass OpenStreetMap immer mehr Daten enthält und die herunterladbaren Dateien dadurch täglich größer werden.
Anmerkung: Diese Tabelle ist noch nicht fertig. Die Spalte mit dem RAM-Verbrauch kann jeder füllen, der das jeweilige Gebiet für sich konvertiert hat, denn der RAM-Verbrauch ist vom Prozessor unabhängig. Bitte nur eintragen, wenn während der Erzeugung keine weiteren anspruchsvollen Programme liefen (ähnliche Testbedingungen).
region | size of PBF file | RAM consumption | RAM assigned at starting OsmAndMapCreator | time consumption | output size of obf file |
---|---|---|---|---|---|
Baden-Württemberg, Germany | 220 MB | ca, 3 h 15 min (Linux 64 Bit, Intel Core i5-460M, 8 GB RAM) | |||
Bayern, Germany | 586 MB | 15 GB | 1 GB–17 GB (-Xms4G -Xmx16G) | 2:35 h:min; (Linux Debian 9, Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz, 20 GB RAM) | 1,1 GB |
Bavaria, Germany | 300 MB | aborted by user after more than 7 h (Linux 64 Bit, Intel Core i5-460M, 8 GB RAM) | |||
Bielefeld | 19 MB | 281 MB | 5,5 min (Linux 32, Intel(R) Pentium(R) 4 CPU 2.66GHz, 2 GB RAM) | ||
Sachsen-Anhalt, Germany | 46 MB | ca. 15–20 min (Linux 64 Bit, Intel Core i5-460M, 8 GB RAM)z | |||
Germany | 2.5 GB | less than 6 GB | 14GB + Harddrive | ~54 hours (Linux 64 Bit, Intel Core i7-4700MQ @ 2.40GHz, 16 GB RAM, mostly idle the complete time of conversion) | |
Berlin | 43 MB | 14 GB | ~4 minutes (Linux 64 Bit, Intel Core i7-4700MQ @ 2.40GHz, 16 GB RAM, mostly idle the complete time of conversion) | 98 MB | |
Lower Saxony, Germany | 214 MB | less than 6 GB | 14G B | ~40 minutes (Linux 64 Bit, Intel Core i7-4700MQ @ 2.40GHz, 16 GB RAM, mostly idle the complete time of conversion) | 414 MB |
Munich, Germany | 27 MB | ~4 GB | 2 GB (+ 2 GB swap) | ~60 minutes (Linux 64 Bit, Intel Core 2 Duo CPU T8300 @ 2.40GHz, 2GB RAM + 2GB swap, at the begin nothing else worked due to high ram- and hdd-use) | 58 MB |
Rhineland-Platinate, Germany | 157 MB | 4,1 GB | 1–12 GB | 15 min (Win 7 64bit, AMD FX-8350 4 GHz, 16 GB RAM) | |
Brandenburg, Germany | 129 MB | 2,5 GB | 1–4 GB | ca. 1 h, (openSUSE 13.1 64, AMD Athlon(tm) 64 X2 Dual Core Processor 4600+, 7 GB RAM | |
Baden-Württemberg, Germany | 386 MB | 15,2 GB (including swap) | 64 MB–11,8 GB | 4:41 (Linux, Intel Core i5-6400, SSD Crucial BX100 500GB (CT500BX100SSD1), 16 GB RAM), sqlite_in_memory | 562 MB |
Hessen, Germany | 203 MB | ~ 5 GB | 1 GB – 6 GB | 2:30 (Debian 64bit, Intel Core2 Duo P8400, 8 GB RAM) | 375 MB |
Georgia, United States | 174 MB | ~5 GB (plus some swap) | 512 MB–6 GB (-Xms512M -Xmx6144M) | 2.5 h (Windows, Intel Core i7-3612QM @ 2.1GHz, 8 GB RAM) | 265 MB |
Ontario, Canada | 581 MB | 11.2 GB | 1 GB–13 GB (-Xms1G -Xmx13G) | 7 h (Windows, Intel Core i7-3770 @ 3.4GHz, 16 GB RAM) | 695 MB |
Québec, Canada | 352 MB | 9 GB | 1 GB–13 GB (-Xms1G -Xmx13G) | 3 h (Windows, Intel Core i7-3770 @ 3.4GHz, 16 GB RAM) | 490 MB |
Ukraine, whole country | 378 MB | 64 MB–6.8 GB (-Xms64M -Xmx6800M) | 2:42 h (MacOS, Intel Core i5 @ 2.8GHz, 8 GB RAM) | 738 MB | |
Unterfranken, Deutschland | 61,53 MB | 6,4 GB | 4 GB–16GB (-Xms4G - Xmx16G) | 00:08:50 hh:mm:ss (Linux Debian 9, Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz, 20 GB RAM) | 112 MB |
Utah, USA | 65 MB | 5.2 GB | 4 GB-14 GB (-Xms4G -Xmx14G) | 7.5 min (Linux, AMD Ryzen 7 2700 @ 2.2 GHz, 16 GB RAM) | 125 MB |
Gebiete ab etwa 300 MB kann man nicht mehr auf einmal in das .obf-Format konvertieren, ohne sqlite_in_memory
zu verwenden und ausreichend RAM zu haben. Man muss diese Gebiete aufteilen und die Teile konvertieren. Deshalb werden auch keine .obf-Dateien für ganz Deutschland angeboten.
Menge des zugewiesenen Speichers anpassen
In der .bat- bzw. .sh-Datei taucht die Zeichenfolge -Xms64M -Xmx512M auf. Diese ersetzt man je nach Größe der .obf-Datei und des vorhandenen Arbeitsspeichers durch die Wert der Tabelle. Dabei sollte man, wenn keine weiteren Programme laufen unter Windows dem System mindestens 1,3 GB übrig lassen. Unter Linux ist der Speicher, den man dem System übrig lässt, von der Desktopumgebung abhängig; unter anspruchsvollen Oberflächen wie Unity sollten es mindestens 800 MB sein.
Beispielrechnung:
(1) | installierter Arbeitsspeicher | 4 GB |
(2) | Speicherverbrauch im Leerlauf (systemabhängig, im Task-Manager nachschauen) | 1,3 GB |
(3) | Differenz aus (1) und (2) | 2,7 GB |
(4) | minimale Speicherzuweisung (Wert hinter -Xms) | 200 MB |
(5) | maximale Speicherzuweisung (Wert hinter -Xmx) | 2,5 GB (Achtung Dezimaltrenner! Schreibe: -Xmx2500M) |
Bitte beachte, dass zwischen den Zeichenfolgen -Xms und -Xmx und dem dazugehörigen Zahlenwert kein Leerzeichen stehen darf.
Die fertige .obf-Datei auf das Handy kopieren
OsmAndMapCreator gibt eine .obf-Datei aus, welche man auf dem Android-Smartphone im Anwendungsverzeichnis von OsmAnd ablegt. Den Ort des Anwendungsverzeichnisses kann man in den OsmAnd-Einstellungen unter dem Punkt Allgemein ändern. Es empfiehlt sich, /mnt/sdcard/osmand (Achtung! Der Einhängepunkt der SD-Karte ist auf manchen Smartphones ein anderer als /mnt/sdcard) zu verwenden. Dafür wählt man in den OsmAnd-Einstellungen dann das Verzeichnis /mnt/sdcard. Beachte, dass Android auf Linux basiert und bei Dateien und Ordnern auf Groß- und Kleinschreibung geachtet werden muss. /mnt/extSdCard ist nicht mit /mnt/extsdcard identisch!
Hinweise für Windows-Nutzer
Sollte beim Doppelklick auf die Datei OsmAndMapCreator.bat die Fehlermeldung "javaw konnte nicht gefunden werden" erscheinen, dann ist entweder kein Java installiert oder es fehlt der Eintrag in der PATH-Variable.
Siehe auch
- Diskussion im deutschen OSM-Forum
- Create Offline Maps For Yourself, Anleitung im OsmAnd-Wiki mit Informationen zum Speicherverbrauch und sqlite_in_memory
- BBBike.org extract service bietet OsmAnd Kartenauschnitte deiner Wahl, wöchentlice Aktualisierung