Kartendaten von OpenStreetMap
Jede Karten-Anzeigesoftware benötigt Kartenmaterial.
Eine sehr populäre und gute Adresse dafür ist
OpenStreetMap (OSM).
Genaugenommen ist es, für einen kleinen Bastler-Wurm wie mich, die einzige Adresse über die man an brauchbare Daten
kommt. Die Basisdaten sind für alle offen und frei zugänglich. Und es gibt ein ganzes Ökosystem an Tools für die Datenaufbereitung.
Alle meine folgenden Aktivitäten und Berichte bauen daher auf OSM auf.
Aber der Reihe nach. Woher bekommt man eigentlich die (Offline-)Karten und wie funktioniert das alles überhaupt?
Die Weltkarte im OSM Datenformat
Mit dem Begriff "Karte" muss man etwas aufpassen. Die OSM-Weltkarte enthält alle Daten in Form einer
riesigen, digitalen Liste, bestehend aus
alle Infos und Koordinatenangaben die bisher zusammengetragen wurden (*.OSM).
Um die Datenmenge zu reduzieren werden die Daten in das
PBF-Dateiformat
umverpackt. Die Dateierweiterung ist *.osm.bpf .
Diese Datenbank enthält keine Kartenbilder und ist für Normalsterbliche erstmal kaum brauchbar, schon alleine
wegen der extremen Grösse von mehreren TerraByte. Es ist daher vorab eine Bearbeitung notwendig.
Raster oder Vector
Für die Darstellung auf einem Bildschirm, z.B. in einem Internet-Browser, müssen die Kartendaten interpretiert und in eine Grafik umgewandelt werden. Dafür gibt es, ganz grob, 2 Ansätze:
- Raster: Der gewünschte Kartenausschnitt wird in eine Pixelgrafik umgerechnet, 256x256 Pixel im JPG oder PNG Format. Das macht normalerweise der Kartenanbieter vor dem Verschicken übers Internet. Raster ist die aktuelle üblichste Methode.
- Vector: Die Daten werden in einem Vector-Format verschickt und erst im Browser des Nutzers in Grafik übersetzt. Die Art der Daten und der anzuwendende Stil, und damit die visuelle Erscheinung der Elemente, kann individuell festgelegt werden. Das bedeutet weniger transportierte Daten aber höhere Anforderungen an die Rechenleistung.
Das populäre Google-Maps basiert auf dem Raster-Ansatz. Bei jedem Aufruf der Seite, und bei jeder Änderung der Ansicht, geht eine Anfrage an den Google-Server. Der berechnet die passenden Pixelbilder und schickt sie zurück.
OpenStreetMap hat vor einiger Zeit damit begonnen auch Vector-Karten anzubieten. Der Vector-Ansatz erscheint mir gut und modern zu sein. Allerdings wird er nicht von MapViewer unterstützt und ist somit für mich aktuell nicht relevant. Ich fokusiere mich daher im folgenden nur auf den Raster-Ansatz.
Das Prinzip der Kacheln
Die Kachel-Aufteilung wird aktuell von allen relevanten Kartenanbietern verwendet. Dabei ist die Weltkarte in Kacheln
(englisch "Tiles") unterteilt.
Jede Kachel hat ein festes Bildformat mit 256x256 Pixel. Die Anzahl der existierenden Kacheln hängt von der Zoomstufe ab.
Mit jeder Stufe vervierfacht sich die Anzahl. Die Indizierung wird durch Angabe der X-
und Y-Zählung sowie der Zoomstufe festgelegt (0.. 18 oder 20, je nach Anbieter). Sie wird in diesen Beispielen
am oberen Kachelrand eingeblendet.
Zoomstufe 0 besteht aus nur 1 Kachel:
Zoomstufe 1 hat 4 Kacheln:
Zoomstufe 2 hat 16 Kacheln. Da die Kacheln eine feste Pixel-Grösse haben passen sie nicht mehr alle gleichzeitig auf den Bildschirm.
Ab hier wird nur noch die sichtbare Teilmenge der Kacheln benötigt, in diesem Beispiel immer nur 12 Stück:
Mit zunehmender Zoomstufe wächst die Anzahl der existierenden Kacheln exponentiell.
Die X_Y_Z-Werte im folgenden Bild der Zoomstufe 13 zeigen wo die Reise hingeht:
Die Firma
GeoFabrik
bietet auf ihrer Seite verschiedene
Tools
an. Eines davon berechnet die
Speichergrösse über Zoomstufe. Es ist erscheckend viel
Speicherplatz notwendig wenn man die höchsten Zoomstufen offline verwenden möchte.
Im Wiki von OpenStreetMap findet sich eine Statistik über die Abrufe und Bereitstellung der verschiedenen Kacheln:
Wie man sieht kann die Anzahl der Kacheln schnell in die Millionen laufen. Es ist daher praktisch nicht machbar,
oder sehr schwierig, alle Zoomstufen offline vorzuhalten. Für nur sehr gelegentliche und örtliche begrenzte Nutzung
(z.B. wenn man auf Google Maps etwas sucht) ist es wesentlich ökonomischer die relativ wenigen Kacheln bei Bedarf
online herunterzuladen.
Die Kartenanbieter betreiben zu diesem Zweck grosse Server auf denen die fertig berechneten Kacheln gespeichert sind. Die selten
abgefragten Kacheln in hoher Zoomstufe werden in Echtzeit berechnet.
Welche Kachel man gerade benötigt kann man aus Längengrad und Breitengrad berechnen. Wie das geht wird bei
maptiler
ausführlich erläutert. Hier der Code-Schnipsel in Pascal:
{
// zoom: Zoomstufe
// xtile : Tile-Index X
// ytile : Tile-Index Y
// Coord.LonDeg: Längengrad in Grad
// Coord.LatRad: Breitengrad in Radiant
n := Power(2, zoom);
xtile := Trunc(((Coord.LonDeg + 180) / 360) * n);
ytile := Trunc((1 - (ln(Tan(Coord.LatRad) + (1 /Cos(Coord.LatRad))) / Pi)) / 2 * n);
{
Hier noch eine schöne Übersicht von Maptiler:
Eine weitere Erläuterung zu den Kachelnamen gibt es bei OpenStreetMap
Raster-Karten Anbieter und Abfragen
Eine umfangreiche Übersicht von Anbietern von
Online Map Services bietet diese Wiki-Seite
. Die bekanntesten sind:
- OpenStreetMap
- Google Maps
- Virtual Earth Bing
Die Karten/Kacheln kann man einfach über ein Web-Interface abrufen und im Browser anzeigen. Der folgende Blog Map Tiles and their URL Schemas beschreibt beispielhaft wie das geht.
Das Schemata ist bei allen Anbietern sehr ähnlich. Und sobald man die Adressen und die Syntax des Aufrufs kennt kann man beliebige Kacheln abrufen. Die folgenden Beispiele rufen alle die gleiche Kachel ab, X=2200, Y=1343, Z=12(=Zoomstufe):
https://c.tile.openstreetmap.org/12/2200/1343.png
http://mt0.google.com/vt/lyrs=m@145&v=w2.104&x=2200&y=1343&z=12
https://maps.wikimedia.org/osm-intl/12/2200/1343.png
Styles
Beim Vergleich der beiden folgenden Karten erkennt man direkt dass sie auf der gleichen Grund-Datenbasis basieren,
aber völlig unterschiedlich dargestellt werden.
Der Grund sind die sog. "Styles" die beim Erstellen des Bildes (Rendern) angewendet wurden. Diese Dateien beschreiben
die optische Darstellungen der verschiedenen Elemente der Karten-Datei/Liste.
Wenn man nur mit vorberechneten Raster-Kacheln (online) arbeitet dann sind diese Styles nicht veränderbar.
Man muss damit leben was der Kartenanbieter beim Erstellen verwendet hat. Bei selbst erstellten Karten hat
man alle Freiheiten.
Offline vs Online
Über die HTTP-Zugriffe könnte man sich theoretisch alle benötigen Kacheln für Offline-Betribe herunterladen:
Einfach die notwendigen Kachel-Indizes für das gewünschte Gebiet berechnen, inclusive aller Zoomstufen, und mit
einem Batch automatisiert abrufen und speichern.
Für kleine Datenmengen und wenige Kacheln ist das die beste Methode. Bei höheren Zoomstufen kommen aber
erhebliche Datenmengen zusammen, es wird langsam und belastet die Server. OSM behält sich daher in seinen
Nutzungsbedingungen vor diese Methode zu begrenzen.
Die Anbieter sind sicherlich nicht erfreut wenn jemand stundenlang ihre Server "belästigt".
Sozialer und eleganter ist es daher die Kacheln selbst zu berechnen. Dazu benötigt man die originalen OSM-Daten
aus der Datenbank und ein passendes Tool, z.B.:
Maperivite
oder
OsmAndMapCreater
Die Karte von OpenStreetMap
OpenStreetMap Homepage
Die OpenStreetMap-Organisation sammelt auf allgemeinnütziger Basis die Daten für eine Weltkarte
und bietet diese zur freien Verwendung an. Die Motivation ist ein Gegengewicht zu den von Google und
Microsoft kontrollierten Inhalten zu bieten. Sie wird durch eine Stiftung finanziert.
Drumherum hat sich ein ganzes Ökosystem mit diversen Hilfsprogrammen gebildet. Das Kernstück ist die
OSM-Karte.
Die komplette Welt-Karten-Datenbank, auf der alles basiert, nennt sich "Planet.osm" und ist unter dem
folgenden Link verfügbar:
Planet OSM
Es ist eine gigantische XML-Liste mit einer unkomprimierten Grösse von 1552.8GByte! Der Download wird in 2 Varianten angeboten
Da man sehr selten die ganze Welt benötigt ist es wesentlich praktikabler die PBF-Dateien nur in Teilbereichen herunterzuladen und zu bearbeiten. Anbieter dafür sind z.B.:
Die Teil-Daten gibt es entweder für vordefinierte Gebiete (typisch Länder) oder selbst definierte Bereiche.
Raster-Kacheln selbst berechnen
Der nächste Schritt ist die Berechung der Kacheln aus den Teil-OSM-Daten. Einige Programme dafür
sind z.B.:
Maperivite
oder
Mapnik
oder
maptiler Desktop
oder
OsmAndMapCreater
Man füttert sie mit der regional passenden PBF-Datei und erhält, nach einiger
Rechenzeit, die gewünschten Raster-Kacheln.
Die meisten dieser Programme sind leider nicht für "normale" PC-User gemacht und daher für mich unbrauchbar.
Typischerweise muss man Linux- und Phyton-Profi sein, diverse Hilfspakete installieren und sich in den Details und
Hintergründen der Umrechnung genau auskennen. Also eine Aufgabe für richtige Nerds..
Die einzige Ausnahme (die ich gefunden habe) ist
Maperivite.
Es ist ein einzelnes, kompaktes Windows-Programm. Die Bedienung über Skripte und Kommandozeile ist schnell zu
begreifen. Ein wenig viel Rechenzeit muss man allerdings in Kauf nehmen. Aber hey, es ist kostenlos und
funktioniert prima.
Links
Mobile Atlas Creator
ist ein Programm zur Erstellung von Karten für Handhelds und Smartphones. Der
Java-Quellcode ist auf Sourceforge verfügbar.
Eine alternative, freie Navigationssoftware für Android und iOS ist
Organic Maps Homepage.
Download unter
Organic Maps GitHub
Ein speziell für Motorräder zugeschnittener Online-Routenplaner ist
Kurviger.de