Rendern und Veröffentlichen einer OSM-Karte - Auswahl der Werkzeuge

In diesem und den folgenden Beiträgen beschreibe ich meine Erfahrungen mit dem Rendern und Veröffentlichen einer Karte auf der Basis der OpenStreetMap-Daten.

Anforderungen und Randbedingungen

Ausgangspunkt waren folgende Randbedingungen:

  • Die Karte soll ein Gebiet von mindestens 80 km2 abdecken, mit den Zoomleveln von 12 bis 18
  • Die Karte soll auf einer Webseite veröffentlicht werden. Der Kostenrahmen liegt bei
  • Arbeitsumgebung ist Linux (Debian Wheezy)
  • Freie Gestaltung des Kartendesigns, insbesondere soll es möglich sein, parallel versetzte Linien zu rendern, z.B. für straßenbegleitende Radwege und -spuren.

Auswahl der Tools

Für das Rendern der Karte standen Maperitive und Mapnik zur Auswahl. Da Mapnik grundsätzlich den Einsatz einer PostGis-Datenbank erfordert und mir dies zu aufwändig erschien und zudem der erste Versuch einer PostGis-Installation scheiterte, habe ich zunächst Maperitive eingesetzt, weil es direkt mit den OSM-Daten im OSM-XML-Format arbeitet.

Maperitive ist eine .Net-Anwendung, lässt sich aber unter Linux mit Mono installieren und betreiben. Die Performance ist weniger gut als unter Windows aber auf meinem Phenom II X2 sind die Reaktionszeiten beim interaktiven Arbeiten im akzeptablen Bereich. Unschön ist allerdings, dass Schriften unter Linux auf Grund einer Einschränkung von Mono nicht immer sauber gerendert werden.

Der große Vorteil von Maperitive ist die integrierte Entwicklungsumgebung, mit der Änderungen in den Stil-Dateien ohne große Verzögerung in die gerenderte Karte übernommen werden. Mit den zahlreichen verfügbaren Beispiel-Stilen kann auf diese Weise in kurzer Zeit eine individuelle Karte erzeugt werden. Ebenfalls von Vorteil sind die vielen grafischen Gestaltungsmöglichkeiten, z.B. zum Erzeugen von Mustern und Symbolen. Trotzdem war ich mit dem Endergebnis nicht zufrieden, das Kartenbild machte irgendwie einen unprofessionellen Eindruck. Das soll nicht als Kritik an Maperitive verstanden werden, möglicherweise habe ich zu früh auf andere Tools umgeschwenkt.

Vor dem Umstieg auf Mapnik musste zunächst PostgreSQL und PostGis installiert werden. Das geht recht einfach, da hierfür Debian-Pakete existieren. Wheezy enthält PostGIS 1.5., wegen eines Versuchs mit der Funktion ST_UnaryUnion habe ich nachträglich PostGIS 2.0 aus den Quellen installiert. Obwohl diese Funktion letzendlich nicht verwendet wird, bin ich bei 2.0 geblieben.

Schwieriger war der Import der OSM-Daten in die PostGIS-Datenbank. Das lag hauptsächlich daran, dass ich das Tool osm2pgsql erst nach ein paar Fehlversuchen mit anderen Tools gefunden habe. Beim anschließenden Test der damit erzeugten Datenbank mit QGis habe ich festgestellt, dass sich dieses mit der neuen Symbologie hervorragend zum Rendern einsetzen lässt. Leider unterstützen die Tools zum Erzeugen von TMS-Kacheln nicht die neue Symbologie, so dass diese Spur nicht weiter verfolgt wurde, aber langfristig könnte dies eine komfortable Lösung sein.

Mapnik ist in Debian Wheezy in der Version als Paket in der Version 2.0 verfügbar und funktioniert ohne Probleme. Da ich zum Rendern parallel versetzter Linien den LineSymbolizer-Parameter offset benötige, der erst in Mapnik 2.1 verfügbar ist, habe ich die Version 2.1. aus den Quellen installiert. Das Arbeiten mit dem XML-Format der Mapnik-Stildateien ist recht mühsam, da es keinerlei Möglichkeit von Verschachtelung oder Vererbung gibt. Das bläht die Datei enorm auf, sie wird unübersichtlich und fehleranfällig. Ich habe mich nach Alternativen umgeschaut und bin zunächst auf Cascadenik gestoßen, das mit Stylesheets in CSS-Syntax arbeitet. Obwohl die Arbeit mit Cascadenik sehr positiv verlief, bin ich nach kurzer Zeit auf Tilemill umgestiegen, welches mit einer ähnlichen Stil-Syntax arbeitet.

Für die Veröffentlichung habe ich mich für OpenLayers entschieden. Es hätte aber genau so gut Leaflet sein können.

Somit ergibt sich die folgende Tool Chain:

  • Importieren der OSM-Daten nach PostGIS mit osm2pgsql
  • Nachbearbeiten der PostGIS-Daten
  • Rendern der Karte mit Tilemill
  • Anzeige der Karte mit OpenLayers