OpenOutdoorMap

- Wie erstelle ich eigene Mapsforge Karten? -


OpenOutdoorMap

Eigene Karten erstellen - Warum?

Seit vielen Jahren nutze ich die Karten von OpenAndroMaps. Irgendwann hat es mich dann gereizt zu verstehen, wie diese Karten erstellt werden können. Außerdem gibt es mir die Freiheit, eigene Symbole und Darstellungen nach meinen Bedürfnissen einzubauen und zu verändern.

Hier möchte ich meine Erfahrungen teilen und euch anregen eure eigenen Karten zu bauen. In vielen Stunden des Probierens und Optimierens habe ich dafür ein Skript entwickelt. Es ist . . .

  • entwickelt für Windows Rechner
  • für die Erstellung von Karten von allen Gebieten der Welt geeignet
  • für topographische Karten
  • für mehrere Kartenthemen verwendbar
  • hoffentlich verständlich erklärt und
  • die fertigen Karten sind mit mehreren Apps verwendbar.

Mein Skript für die Erstellung der OpenOutdoorMap ist ein Windows-Batch-Skript (.bat Datei). Zum Ausführen reicht die auf jedem Windows Rechner verfügbare Konsole (CMD). Das Skript kann mit einem einfachen Texteditor (Editor, Wordpad, notepad ...) bearbeitet werden.

Das ist notwendig, da vor dem Start Grundeinstellungen und Einstellungen zum jeweiligen Kartenprojekt vorgenommen werden müssen. Dazu gehören die Speicherorte der Daten, die Pfade zu installierten Software-Paketen, die Pfade zur Ablage von Kartenprojekten und den erstellten Karten. Für jede Karte müssen Parameter wie Name, Bereich (ein rechteckiger Bereich oder basierend auf einer .poly Polygon-Datei), ob die Karte Meeresflächen enthalten wird, usw. festgelegt werden. Ist alles richtig eingestellt, dann durchläuft das Skript bis zu 12 einzelne Schritte. Dabei wird für jede Karte automatisch ein Kartenordner angelegt, in dem sich alle Zwischen-Dateien aus den einzelnen Schritten und auch die fertige Karte befindet. Dort wird auch die Log-Datei und eine Error-Log-Datei gespeichert.

Je nach Größe des Kartenbereichs und der Rechner-Ausstattung dauert eine Kartenerstellung wenige Minuten bis mehrere Stunden. Zum Beispiel brauche ich für eine Karte des Nord-Alpen Bereichs (Datei-Größe der Karte ca. 1,5 GB) gut 6 Stunden (Laptop mit i7-11. Gen, 16 GB Ram, SSD). Für die ersten Versuche sollte man aber besser mit sehr kleinen Karten starten (z. B. ein Quadrat von jeweils 1 Grad).

Der Kartenbau Prozess


Kartenbauprozess'

Bis eine fertige Karte entsteht braucht es . . .

  • Daten aus verschiedenen Datenquellen
  • viele einzelne Schritte
  • mehrere installierte Software Pakete
  • und Geduld

Ich beschreibe deshalb diese einzelnen Schritte im Detail . . .

  • Was brauche ich? - Vorbereitung (Software Installationen)
  • Woher kommen die Daten? - Datenquellen
  • Wie erstelle ich die Karte? - Das Skript
  • OpenOutdoorMap - Die Karte

Was brauche ich? - Vorbereitung (Software Installationen)

Ich lege alles, was mit dem Kartenbau zu tun hat (bis auf die Python-Installationen) in einen Kartenbau-Ordner ab, der jeweils Unterordner für die DATEN, die Hilfssoftware (TOOLS), die abgelegtgen HÖHENDATEN usw. enthält. Auf diesem Ordner sollten volle Schreibrechte bestehen. Hier mal ein Vorschlag für eine Ordnerstruktur:

Es werden folgende Software Pakete benötigt:

  1. Java Umgebung (bei mir Version 8 Update 291)
  2. Perl
  3. Osmosis
  4. Mapsforge Map-Writer Plugin (für Osmosis)
  5. Osmconvert
  6. Osmfilter
  7. Phyghtmap (Python 2.7)
  8. Python 3 (für shape2osm.py)
  9. ogr2ogr (GDAL und Python bindings)

Wenn man nur Karten für Bereiche, die keine Meeresgebiete und Küstenlinien enthalten, erstellen möchte dann benötigt man die Software unter Punkt 8. und 9. nicht. Da die dafür notwendigen Installationen etwas komplizierter sind, kann man sie also für die ersten Test-Karten zunächst weglassen.

Da einige Software Pakete eine spezielle Konfiguration brauchen, gebe ich folgende Erfahrungen weiter:

1. Java Umgebung

Einfache Standard Installation ohne weitere Einstellungen.

2. Perl

Es gibt mehrere kostenlose Perl Interpreter. Ich verwende eine Standard "Strawberry Perl" Installation. Danach sollten auch die notwendigen Eintragungen in den Systemvariablen automatisch eingetragen sein.

3. Osmosis

Eine Java-Software, die nicht speziell installiert werden muss. Man entpackt die heruntergeladene Datei und schiebt den gesamten Ordner (am besten umbenannt in "osmosis") in einen "TOOLS"-Ordner (in dem man weitere Hilfssoftware und Skripte sammelt). Anschließend muss noch ein wichtiger Parameter eingestellt werden. Dazu muss folgende Zeile in die Datei ".\osmosis\bin\osmosis.bat" eingetragen werden (oberhalb der letzten 3 Zeilen, die mit "set" beginnen):

set JAVACMD_OPTIONS=-Xms8G -Xmx8G -server -Djava.io.tmpdir=XXX

Bei XXX muss ein Pfad zu einem Ordner für die temporäre Ablage von Dateien stehen. Der Ordner kann irgendwo abgelegt werden und frei benannt sein. Ansonsten enthält die Zeile noch die Angabe zur Nutzung von bis zu 8GB Arbeitsspeicher.

4. Mapsforge Map-Writer Plugin für Osmosis

Dies ist die zentrale Software, die aus den gesammelten Daten am Ende eine Karte rendert. Es ist ein Plugin für die gerade schon installierte Osmosis Software. Zunächst muss man im Ordner "osmosis" den Ordner "plugins" anlegen. Da hinein wird die entpackte .jar Datei des Mapsforge Map-Writer Plugins abgelegt. Eine weitere Installation ist nicht nötig.

5. Osmconvert

Die ".exe" Datei am besten auch in den Tools-Ordner gelegen. Es ist keine Installation erforderlich.

6. Osmfilter

Wie bei Osmconvert. Es ist keine Installation erforderlich.

7. Phyghtmap

Die korrekte Installation dieser Software für die Erstellung der Höhenlinien-Daten stellt eine gewisse Hürde da. Phyghtmap benötigt eine Python 2 Installation und mehrere zusätzliche Module, die in einer bestimmten Reihenfolge installiert werden müssen. Da ich diese Software auch für die Erstellung von Karten für Garmin-GPS Geräte benötige, habe ich dafür schon eine genaue Anleitung geschrieben.

8. shape2osm und Python 3

Das Python Skript "shape2osm.py" läuft nur unter Python 3 und wenn zusätzlich, wie unten beschrieben, GDAL und die "Python bindings" installiert sind. Man muss also neben Python 2 (für Phyghtmap) eine weitere Python Installation vornehmen. Ich habe dazu aktuell Python 3.9.9 (64bit) installiert. Wichtig ist dabei, dass bei der Installation gleich die Option "Add Python 3.9 to PATH" angewählt wird. Die notwendigen Umgebungsvariablen werden so automatisch eingetragen. Das Skript "shape2osm.py" sollte wieder in den "TOOLS" Ordner abgelegt werden.
Ich habe das Skript für die hier beschriebene Kartenerstellung der OpenOutdoorMaps angepasst. Es sollte nur diese Variante verwendet werden:

9. ogr2ogr (GDAL und Python bindings)

"ogr2ogr" ist Teil einer GDAL Installation. Passend zur installierten Python Version 3.9 (siehe vorheriger Abschnitt) habe ich diese GDAL core-Version heruntergeladen. Nach einer Standard Installation von GDAL 3.3.3 müssen noch folgende Umgebungsvariablen (jeweils als Systemvariable) eingetragen werden:

Variable GDAL_DATA Wert C:\Program Files\GDAL\gdal-data (Wenn GDAL in den Ordner C:\Program Files\GDAL installiert wurde)

Variable GDAL_DRIVER_PATH Wert C:\Program Files\GDAL\gdalplugins

Und in der Variable PATH der Eintrag C:\Program Files\GDAL

Die Python bindings kann man am leichtesten über diese Datei installieren: GDAL 3.3.3 Python 3.9 binding (für 64 bit Rechner) Nach dem Download wird die Datei in den Ordner der Python Installation gelegt (bei mir C:\Python39\) und in der Kommandozeile über diesen Befehl installiert:

py -m pip install GDAL-3.3.3-cp39-cp39-win_amd64.whl

Eine erfolgreiche Installation kann man prüfen, in dem man z. B. in seinem Kartenbauordner die Kommandozeile aufruft und den Befehl "ogr2ogr" eingibt. Es sollten dann die "usage" und die "advanced options" aufgelistet werden.

Woher kommen die Daten? - Datenquellen

Openstreetmap Daten

Grundlage einer jeden Karte sind die Daten der OpenStreetMap Datenbank. Man muss also einen Ausschnitt, der mindestens so gross ist, wir der Bereich, für den man eine Karte erstellen kann, von OpenStreetMap herunterladen. Hier 3 Datenquellen als Beispiel:

  • Die aktuellsten Datenauszüge (nach Ländern oder Regionen) bekommt man bei der Geofabrik -> hier
  • Bei BBBike kann man spezielle Bereiche nach eigenen Wünschen erhalten (am besten im PBF Format) -> hier
  • Eine weitere Möglichkeit bietet Protomaps. Auch hier kann die Daten über ein Rechteck oder Polygon auf einer Karte eingrenzen -> hier

Kartengrenzen (.poly Dateien)

Die passenden Polygon Dateien (nach Ländern oder Regionen) bekommt man ebenfalls bei der Geofabrik. Sie sind im Download Bereich für einen Kartenbereich unter "Other Formats" verlinkt.
Wenn man eigene Polygone zeichnen will, dann bekommt man hier zumindest die entsprechenden Koordinaten gelistet und kann mit einem Texteditor eine .poly-Datei leicht anpassen.
Für eine rechteckige Karte benötigt man die 4 Eckkordinaten. Diese kann man z. B. hier sehr leicht ermitteln (rechts unter "CD" findet man die Koordinaten).

Daten für Höhenlinien

Die Daten für die Erstellung der Höhenlinien werden von der Software Phyghtmap automatisch heruntergeladen, wenn sie nicht für eine Kartenerstellung schon einmal geladen worden sind. Die .hgt Dateien werden dabei in einen Ordner abgelegt, der in den Einstellungen des Kartenbauskripts festgelegt wird.

Daten für Gipfel- und Pass Optimierungen

Nicht jeder Gipfel ist gleich "wichtig". Deshalb macht es Sinn, Gipfel auf Grund ihres horizontalen Abstands und ihres Höhenunterschieds zu anderen Gipfeln unterschiedlich darzustellen bzw. früher oder später in der Karte anzuzeigen (Hintergrund dazu ). Dafür wird für jeden Gipfel der Tag "peak dominance" (pd_1-5) eingebaut. Die Daten für die Höhe eines Gipfels sind in OpenStreetMap enthalten. Die Daten für den horizontalen Abstand ("isolation") werden hier (ca. 28 MB) zur Verfügung gestellt.

Bei einem Passübergang im Gebirge kann man die Darstellung in einer Karte verbessern, in dem das Symbol für den Pass senkrecht zur gedachten Verbindungslinie der den Pass eingrenzenden Anhöhen ausgerichtet wird. Für diese gewinkelte Darstellung werden hier (ca. 2 MB) die notwendigen Daten zur Verfügung gestellt.

Beide Downloads enthalten Datensätze für die gesamte Welt. Damit die entsprechenden Werte bei der Kartenerstellung berücksichtigt werden können, müssen sie vorher prozessiert werden. Für EUROPA habe ich dazu ein Batch-Skript erstellt, dass zusammen mit einem Perl-Skript eine OpenStreetMap-Datei (.osm) erzeugt. Diese muss für alle Karten in der Region Europa nur einmal erstellt werden. Aus dieser Datei werden bei der Kartenerstellung dann die jeweiligen Gipfel- und Pass-Daten eingebaut.

Die fertig prozessierten "Peak-Saddle"-Daten für EUROPA können hier geladen werden

  Stand: 12-2021

Landpolygone (coastline Daten)

Wenn ein Kartenbereich Meeresflächen enthält, dann müssen die Küstenlinien (am Festland und um die Inseln) in einem extra Schritt erstellt werden und über den Hintergrund der Meeresfläche gelegt werden. Da sich die dafür benötigten "land polygons" Daten im Normalfall nicht wirklich verändern, müssen sie nur einmal heruntergeladen werden: -> hier Ich verwende dabei diese Version: "Large polygons are split, Projection: WGS84". Die geladenen Daten (enthält die komplette Welt) werden in einen Ordner entpackt und bei der späteren Kartenerstellung entsprechend zugeschnitten und in das .osm Format konvertiert. So erreicht man die durchgängige Darstellung des Meeres und aller Inseln und Küstenlinien.

Routen (Fahrrad, Wandern, Schlitten, Skitour)

Fahrrad- und Wanderrouten und teils auch Schlittenbahnen und Skitourenrouten werden in Openstreetmap oft als sogenannte "relations" eingetragen. Darin wird festgehalten, welche "ways" zusammengenommen eine Route bilden. Routennamen und Referenznummern werden dann zu diesen "relations" eingetragen. Da aber leider der "Mapsforge Map-Writer" bisher nicht mit "relations" umgehen kann und diese deshalb nicht in der Karte enthalten wären, muss man sich einen kleinen Trick zunutze machen. Dazu werden zunächst für jede Routenart die "relations" ausgefiltert und dann mittels eines "tagtransfrom" die Information, dass ein Weg zu einer Route gehört, beim jeweiligen Weg eingetragen. Das funktioniert gut für die Route an sich, aber leider nicht für die Routennamen, Referenznummern und sonstige Tags, die nur bei den "relations" vorhanden sind. Für diesen Prozess benötigt man keine weiteren Daten (es werden die vorhandenen Openstreetmap Daten verwendet), aber spezielle tagtransform Skripte. Diese gibt es hier zum Download. Der gesamte Routenprozess ist im "OpenOutdoorMap Skript" enthalten und wird automatisch mit ausgeführt.

  für Schritt 11 (Osmosis tagtransform für die Erstellung von Routen [bike,hike,sled,skitour] )

Wie erstelle ich die Karte? - Das Skript

Wenn alle Software erfolgreich installiert ist und die notwenigen Roh-Daten heruntergeladen wurden, dann kann die Kartenerstellung beginnen. Alle oben im "Kartenbau Prozess" gezeigten Schritte sind in einem Batch-Skript ("OpenOutdoorMap_SKRIPT.bat") zusammengestellt, das über die Kommandozeile aufgerufen werden kann. Bevor man diese startet sollten aber einige Einstellungen im Skript selber vorgenommen werden. Dazu kann man das Skript in einem beliebigen Texteditor öffnen und entsprechend anpassen.

Die allgemeinen Einstellungen sind (nur beim ersten Mal einzutragen):

  • Der Pfad für das Kartenbau Verzeichnis
  • Die Pfade für Projekte, Daten, Poly-Dateien, Tools (installierte Hilfs-Software), Peaks, Hgt-Dateien (Höhendaten), Landpolygone
  • Der Pfad für temporäre Dateien (wird während der Kartenerstellung genutzt und dann automatisch gelöscht)
  • Java Speichermenge in MB
  • Die Standard-Höhenlinien Abstufung

Die Karten-spezifischen Einstellungen sind:

  • Karten-Name
  • Die Openstreetmap Daten-Datei
  • Die in der Karte verwendeten Sprachen
  • Kartenbereichs-Typ: Für ein Rechteck "corners", für ein Polygon "poly"
  • Kartenbereich: Für ein Rechteck die Werte minLat, maxLat, minLon, maxLon (Gradzahlen der Latitude und Longitude) oder eine Polygon-Datei (.poly), die den Kartenumriss beschreibt
  • Ob die Karte Meeresflächen enthalten wird
  • Ob die entsprechenden Höhendaten schon vorhanden (sinnvoll, wenn man nur die Openstreetmap Daten aktualiseren will)

Das Skript besteht aus bis zu 13 Schritten, die als jeweiliger Startpunkt angewählt werden können. Das "XXX" ist der Platzhalter für den Kartennamen. Die Schritte 8-10 sind dabei nur nötig, wenn die Karte einen Meeres-Bereich enthält. Dies kann im Skript in der Zeile 61 (set sea=no) voreingestellt werden.

# Schritt Benötigte Software Entstehende Datei
1 Ausschneiden der OSM-Daten (nach Koordination-Rechteck oder nach Polygon Grenzen) OSMCONVERT 01_XXX_osmdata_raw.pbf
2 Osmosis Tag-Transform OSMOSIS 02_XXX_data_transformed.pbf
3 Nodes von Polygonen erzeugen OSMCONVERT 03_XXX_polygon_nodes.o5m
4 Polygon Nodes ausfiltern OSMFILTER 04_XXX_polygon_filtered.osm
5 Ausschneiden der preproceed Peak/Saddle Daten (peak dominanz, saddle direction) OSMCONVERT 05_XXX_peakdata.osm
6 Laden der Hoehendaten (nach Koordination-Rechteck oder nach Polygon Grenzen) PHYGHTMAP 06_XXX_eledata.o5m
7 Kartengrenzen erzeugen this SKRIPT,Perl 07_XXX_boundary.osm
8 Meerflaeche (Hintergrund) generieren this SKRIPT 08_XXX_sea.osm
9 Landpolygone (Hintergrund) generieren GDAL,SHAPE2OSM 09_XXX_land1.osm
10 Meer und Land (Hintergrund) kombinieren OSMOSIS 10_XXX_sea_land.osm
11 Routen prozessieren (bike,hike,sled,skitour) OSMCONVERT,OSMOSIS 11_XXX_routes.o5m
12 Kombinieren aller Daten (OSM, Polygon, Peaks, Hoehendaten) OSMCONVERT 12_XXX_all_data.pbf
13 Rendern der Karte mit osmosis mapsforge map-writer OSMOSIS XXX.map

  Aktuelle Version: 19.1.2022

Für die hier vorgestellte OpenOutdoorMap werden im Skript-Ablauf die Openstreetmap Daten vorprozessiert ("tagtransform"). Dabei erhalten ausgewählte Tags spezielle Bezeichnungen, die dann im letzten Schritt der Kartenerstellung (Mapsforge-mapwriter) zusammen mit einem spezifischen "tagmapping") verwendet werden können, um erweiterte Darstellungen zu ermöglichen. Dies muss dann z. B. im Locus-App Karten-Theme entsprechend berücksichtigt werden. Deshalb sollte für eine OpenOutdoorMap immer die komplette Kombination aus "tagtransform", "tagmapping" und "theme" verwendet werden.

Diese beiden Dateien jeweils entpacken und in den Ordner "TOOLS" ablegen.

  für Schritt 2 (Osmosis tagtransform)

  für Schritt 13 (Osmosis Mapsforge mapwriter tagmapping)

Diese Theme Datei wird am Endgerät für die entsprechende Karten-App (z. B. Locus) benötigt.

  Karten-Theme für Locus

OpenOutdoorMap - Die Karte

Beispiel-Karte: OpenOutdoorMaps Ausschnitt "Oberbayern" (zugeschnitten mit einer Polygon-Datei)
Den unten gezeigten Kartenbereich gibt es hier zum Download:


OpenOutdoorMap
OpenOutdoorMap


Ich freue mich auf euer Feedback (Fragen, Anregungen, Verbesserungen, gefundene Fehler ...).
Bitte nutzt dazu das Kontaktformular -> hier

Spenden willkommen . . .

Wenn dir mein OpenOutdoorMap Skript und die dazugehörigen Karten-Themen gefallen, freue ich mich sehr über ein kleine Spende. Es ist eine Wertschätzung meiner Arbeit und spornt mich an, weitere Verbesserungen zu entwickeln.