User:Adjuva/Mapnik
Mapnik
Dieser Artikel erklärt, wir aus den OSM-Daten mit Hilfe der Programms Mapnik und einiger Zusatzprogramme eine Karte erzeugt werden kann. Der Schwerpunkt liegt hierbei auf den Konfigurationsdateien für den Renderer Mapnik dem Datenbank-Import-Programm osm2pgsql.
Schritt-für-Schritt-Anleitungen zum Aufsetzen eines entsprechenden Servers gibt es hier nicht -- das findet sich hier oder hier.
Motivation
Mapnik dürfte der bekannteste Renderer für Openstreetmap sein und für viele Leute dürfte die Benutzung von Mapnik der Königsweg für die Erzeugung einer Karte auf Basis von OSM zu sein -- zeigt doch die Karte auf der OSM-Homepage mit ihrer minütlichen Aktualisierung und der detaillierten Darstellung, was mit Mapnik möglich ist. Die wenigsten Leute werden allerdings genau wissen, wie Mapnik funktioniert und man hat häufig das Gefühl, dass diese Leute viel mehr Intelligenz hinter Mapnik vermuten als in Wirklichkeit vorhanden ist. Dieser Artikel soll hier Aufklärung bieten.
Nebenbei sei noch gesagt, dass der Autor dieses Artikels das notwendige Wissen rein passiv durch Lesen der Quelltexte und Dokumentationen erlangt hat. Es kann also gut sein, dass ein wichtiges Detail fehlt oder falsch dargestellt wird.
Datenfluss in OSM
Der Openstreetmap-API-Server, der alle OSM-Daten verwaltet und den die Editoren benutzen, um Änderungen an den Daten zu veröffentlichen, benutzt eine PostgreSQL-Datenbank. Das Schema dieser Datenbank ist darauf optimiert, die API zu bedienen. Mapnik benutzt auch eine PostgreSQL-Datenbank -- allerdings mit einem vollkommen anderem Schema auf der Basis von PostGIS, einer PostgreSQL--Erweitung für geometrische Objekte mit geografischen Koordinaten.
Einmal in der Woche wird aus der API-Datenbank eine komprimiert ca. 15 GB große Datei mit allen aktuellen OSM-Daten erzeugt und auf einem ausschließlich dafür vorhandenem [[1]] abgelegt.
Ein Import dieser Datei in eine PostGIS-Datenbank dauert üblicherweise mehrere Tage. Da das für praktische Anwendungen, bei denen man täglich oder stündlich aktuelle Daten haben möchte, zu lange dauert, hat man sich Abkürzungen ausgedacht: Einmal am Tag werden auf Basis der OSM-API-Datenbank Dateien mit allen Änderungen der letzten 24 Stunden erzeugt ([diff]), jede Stunde Dateien mit den Änderungen der letzten 60 Minuten ([diff]) und jede Minuten Dateien mit den Änderungen der letzten 60 Sekunden ([diff]). Auch diese Dateien stehen zum Download bereit. Mit dem Import dieser Dateien kann man nun eine Datenbank so aktuell halten, dass ihre Aktualität nur ein bis zwei Minuten hinter der der originalen OSM-API-Datenbank hinterherläuft.
PostGIS-Datenbank und osm2psql
Das Programm Mapnik kann seine Eingangsdaten aus vielen verschiedenen Quellen Lesen: Shape-Dateien, TIFF-Dateien, OSM-Dateien oder eben auch eine PostGIS-Datebank. Letzteres ist das Mittel der Wahl, wenn man die Daten minütlich aktualiseren möchte.
Um OSM-Daten in eine PostGIS-Datenbank zu importieren wird das Programm osm2pgsql benutzt. Es kann
- Eine leere PostGIS-Datenbank mit dem osm2psql-eigenem Schema anlegen
- In die leere Datenbank eine OSM-Datei importieren
- Die Datenbank durch den Import der oben beschriebenen Dateien mit den täglichen, stündlichen oder minütlichen OSM-Änderungen aktualisieren
Tabellen
Das Programm osm2psql erzeugt normalerweise vier verschiedene SQL-Tabellen:
- osm_points mit allen OSM-Nodes, die mindestens ein Tag besitzen.
- osm_lines mit allen OSM-Ways, die kleine Flächen sind. Außerdem werden bestimmte OSM-Relationen (type=router) hier abgebildet.
- osm_roads als Teilmenge von osm_ways. Hier sind alle Wege (wichtige Straßen und Eisenbahnen sowie Grenzen) enthalten, die auf den niedrigen Zoom-Leveln benötigt werden.
- osm_areas mit allen OSM-Ways, die Flächen sind. Außerdem werden bestimmte OSM-Relatiopen (Multipolygone, Flächen) hier abgebildet.
Die in diesen Tabellen beschrieben Geometrien (Punkte, Linien und Flächen) dienen als Eingabedaten für Mapnik. Diese Tabellen werden im Folgendem Mapnik-Tabellen genannt.
Es fällt auf, dass hier in den Tabellennamen die OSM-Begriffe 'Node' und 'Way' vermieden werden. Es können nämlich noch drei weitere Tabellen vorhanden sein
- osm_nodes mit allen OSM-Nodes (auch die ohne Tags)
- osm_ways mit allen OSM-Ways
- osm_rels mit allen OSM-Relationen
Diese Tabellen werden vom sogenannten Slim-Modus benutzt. Hier wird jedes OSM-Element eins-zu-eins abgebildet. Die Tabellen dienen zwei verschiedenen Zwecken:
- Es wird eine Import von OSM-Daten auf einem Rechner mit wenig Hauptspeicher möglich
- Es ist eine Aktualisierung der Datenbank mit einer OSM-Änderung-Datei möglich.
Diese Tabellen werden im Folgendem OSM-Tabellen genannt.