Christians Webseite        << zurueck        vor >>

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.
(Hier geht es nur um die "normalen, üblichen" Online-Karten. Anbieter von Routing-Software (z.B. Garmin) haben ihre eigenen, proprietären Methoden und Datenformate).

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.
DigCockpit

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:
DigCockpit
Zoomstufe 1 hat 4 Kacheln:
DigCockpit
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:
DigCockpit

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:
DigCockpit


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.
DigCockpit

Im Wiki von OpenStreetMap findet sich eine Statistik über die Abrufe und Bereitstellung der verschiedenen Kacheln:
DigCockpit

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:
DigCockpit

Eine weitere Erläuterung zu den Kachelnamen gibt es bei OpenStreetMap
DigCockpit

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
Viele Anbieter aus der Wiki-Liste verlangen eine formale Registrierung. Vermutlich um exessiven Download zu unterbinden.

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
DigCockpit

http://mt0.google.com/vt/lyrs=m@145&v=w2.104&x=2200&y=1343&z=12
DigCockpit

https://maps.wikimedia.org/osm-intl/12/2200/1343.png
DigCockpit

Styles

Beim Vergleich der beiden folgenden Karten erkennt man direkt dass sie auf der gleichen Grund-Datenbasis basieren, aber völlig unterschiedlich dargestellt werden.
DigCockpit DigCockpit

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

  • BZip2 komprimiert: 113Gbyte
  • PBF komprimiert : 62GByte

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

DigCockpit

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
DigCockpit