DE:OsmAndMapCreator

From OpenStreetMap Wiki
Jump to navigation Jump to search

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.

Screenshot OsmAndMapCreator

Ablauf der Kartenerstellung

Die Erstellung der OBF-Dateien läuft wie folgt ab:

  1. 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).
  2. Falls der Extrakt zu groß ist, musst du aus ihm mit Osmconvert einen kleineren Ausschnitt ausschneiden.
  3. Erzeuge mit OsmAndMapCreator die OBF-Datei.
  4. 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:

  1. Rohdaten (z.B. bei der Geofabrik herunterladen) oder bestehende Extrakte mit mit Osmconvert oder Osmosis aktualisieren.
  2. Rohdaten ggf. zuschneiden.
  3. Rohdaten so umbenennen, dass sie die Endung .osm.pbf haben und nach /home/$user/mapbuild/osmand-pbf verschieben.
  4. 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