ÖV-Layer-Karte: openptmap.org

openptmap, Beispielausschnitt Berlin-Zentrum

openptmap.org: eine neue ÖV-Karte – aber warum das denn?

Viele von euch kennen die bewährte öpnvkarte.de, eine Landkarte, die alle bei OpenStreetMap eingetragenen Bahn-, U-Bahn, Tram- und Buslinien anzeigt. Nach den länger dauernden Problemen mit dem automatischen Update läuft die Karte seit Sommer 2011 wieder zuverlässig und ist ein wertvoller Begleiter bei der Reiseplanung.

Warum das Rad neu erfinden und alles noch einmal von vorne programmieren?

Ganz einfach: nicht jede Karte passt für jeden Zweck, und nicht jede ÖV-Karte passt für jede Anforderung. Entstanden ist mit der openptmap.org eine ganz neue Karte, die gar nicht so viel Neues enthält: die Basis-Ebene, also die Landkarte selbst, wird nicht eigens generiert. Die openptmap greift auf die bereits verfügbaren Kartenbilder von zwei der verbreitetsten Landkarten zu: die Mapnik-Karte von openstreetmap.org und die Radkarte “Cycle Map”. Dadurch kann der Anwender wählen, welchen Hintergrund er angezeigt haben will – oder er entscheidet sich, das Verkehrsnetz ganz ohne Hintergrund anzuschauen.

mögliche Hintergrundkarten

Und genau dieses Verwenden von nicht Neuem, also von anderen Karten als Hintergrund, ist das Neue an der openptmap. Die Technik dazu gibt es schon lange. OpenLayers, das Werkzeug, mit dem die Kartenteile im Internetbrowser des Anwenders zusammengesetzt werden, unterstützt diese Funktion seit Jahren. Durch Klick auf das “+” rechts oben lassen sich gezielt Ebenen ein- und ausschalten. Viele andere thematische Karten bieten auf diese Weise eine ganze Reihe von zusätzlichen Spezialfunktionen an, die openptmap vorerst nur zwei: die Anzeige von Rollstuhlsymbolen für behindertengerechte Bahnhöfe und eine Verlinkung der aktuellen DB-Abfahrtspläne (klappt nur für Europa).

openptmap-Ausschnitt mit Rollstuhlsymbolen

Hinweise zu Rollstuhlnutzung

Wegen der “eingebauten Faulheit” des openptmap-Servers, keine eigene Basiskarte zu erstellen, brauchen dort nur die Kartenteile generiert zu werden, die ÖV-Linien enthalten. Das sind gar nicht so viele: zur weltweiten Darstellung aller bei OSM eingetragenen ÖV-Linien und Haltestellen in den Zoomstufen 0 bis 17 reichen derzeit etwa 7 Millionen so genannter Kacheln (englisch: Tiles, das sind quadratische Kartenausschnitte mit einer Kantenlänge von 256 Pixeln). Zum Vergleich: eine komplette Weltkarte, die nicht nur ÖV-Linien darstellt, besteht aus etwa 23 Milliarden Kacheln.

Welche Auswirkungen hat das auf den Kartenserver ?

Kartenteile, auf denen keine ÖV-Linien zu sehen sind, werden nicht generiert und nicht gespeichert. Regelmäßig neu generiert werden müssen natürlich Kartenteile, deren zu Grunde liegende OSM-Daten sich geändert haben; das ist allerdings nur dann notwendig, wenn von diesen Änderungen ÖV-Linien, Bahnhöfe und Ähnliches betroffen sind. Im Ergebnis spart diese Vorgehensweise sehr viel Rechenzeit und Festplattenplatz.

Durch die deutlich reduzierte Last für den Server können alle Kacheln im Voraus berechnet werden. Auch in diesem Punkt unterscheidet sich das Verfahren von den sonst häufig eingesetzten Generierungsstrategien, die selten angeschaute Kacheln nur dann berechnen, wenn sie angefordert werden. Ein solches Generieren “on the fly” hat beim Betrachten höherer Zoomstufen Wartezeiten zur Folge, die bei openptmap vermieden werden, weil alle Kacheln jederzeit in einer aktuellen Version verfügbar sind.

Wie lässt sich das erreichen ?

Daten filtern, Daten filtern, Daten filtern… Daten, die nach dem Filtern nicht mehr da sind, müssen nicht verarbeitet werden. Die Verarbeitungskette (“Toolchain”) beginnt daher auch damit, dass die kompletten OSM-Daten der Erde so weit gefiltert werden, dass nur noch das enthalten ist, was später als ÖV-Linien angezeigt werden soll. Die verbleibenden Daten sind mit etwa 100 MByte (gepackt) sehr handlich.

Woher weiß der Server, welche Daten sich geändert haben ?

OpenStreetMap ist eine “lebende Landkarte”, sie wächst und wird laufend aktualisiert. Es wäre unsinnig, bei jeder Datenänderung alle Kacheln neu zu erstellen, es reicht, wenn nur die Kacheln neu generiert werden, auf denen sich ÖV-Linien oder dazu gehörende Informationen geändert haben. Welche Kacheln das sind, findet das Programm heraus, das die Daten in die Datenbank des Servers schreibt: osm2pgsql. Es generiert bei jedem Daten-Update eine Liste mit Kacheln, die sich geändert haben und deswegen neu generiert werden müssen.

Warum so viele Worte ?

Auch wieder wahr. Es geht schließlich um Kartenbilder, warum nicht auch mit einem Bild die Arbeitsweise des Servers verdeutlichen:

                     Daten-Update
                          |
                          v
                    +-----------+
      alte          | Programm  |         neue
      Daten ------> | osmupdate | ------> Daten
        |           +-----------+           |
        v                                   v
  +-----------+                       +-----------+
  | Programm  |                       | Programm  |
  | osmfilter |                       | osmfilter |
  +-----------+                       +-----------+
        |                                   |
        v                                   v
    alte            +------------+      neue
    gefilterte ---> | Programm   | <--- gefilterte
    Daten           | osmconvert |      Daten
                    +------------+
                          |
                          v
                    Datendifferenz
                          |
                          v
                    +-----------+
                    | Programm  | ---> Datenbank-
                    | osm2pgsql |      update
                    +-----------+
                          |
                          v
               Liste geänderter Kacheln
                          |
                          v
                  +----------------+
                  | Programm       | ---> neue
                  | mapnik_tile.py |      Kacheln
                  +----------------+

Arbeitsweise des Kartenservers

Natürlich ist das nur eine Prinzip-Darstellung, manche Details wurden weggelassen, damit die Skizze übersichtlich bleibt. Für diejenigen, die es genauer interessiert, weil sie eine ähnliche Karte selbst entwickeln wollen: im OSM-Wiki ist eine ausführliche Bastelanleitung zu finden.

Wie geht es weiter ?

Wie viele andere OSM-Projekte wird auch dieses Projekt nie wirklich “fertig” sein. So gibt es beispielsweise Ideen, den eher mageren Funktionsumfang der Karte zu erhöhen oder den Update-Zyklus von derzeit 24 Stunden weiter zu verkürzen. Auch könnte die Anzeige der wichtigen Bahnhofsnamen verbessert werden. Derzeit werden in Deutschland, Österreich und der Schweiz in den Zoomstufen 7 bis 10 die Namen aller Hauptbahnhöfe angezeigt. Eine entsprechende Klassifizierung fürs Ausland fehlt noch.

Darstellung von Hauptbahnhöfen in der openptmap

Anzeige der großen Hauptbahnhöfe

Das neue Schema zum Speichern von ÖV-Daten in OSM soll in Zukunft besser unterstützt werden. Hier gibt es jedoch noch ungelöste Probleme, weil zum Beispiel die Unterscheidung zwischen Bahnhof und Haltepunkt nicht Teil des Schemas ist. Das Abrufen der Fahrpläne für Bushaltestellen gelingt oft nicht auf Anhieb, weil die Namen nicht weltweit eindeutig sind. Um dem zu begegnen wurde ein neuer neue Schlüssel “ref_name” eingeführt.

Neue Ideen sind immer willkommen – Mithilfe natürlich auch: es ist ein offenes Projekt.

Weiterführende Links:
ÖV-Karte openptmap
Legende der openptmap
Installationsanleitung der openptmap

(alle Darstellungen: CC-BY-SA OpenStreetMap und Mitwirkende)

Markus

Markus fand zu OpenStreetMap als er 2008 für seinen Garmin-GPS-Empfänger eine bessere Landkarte suchte. Beruflich entwickelt er Programme für unterschiedliche Bereiche. Für OSM schreibt er freie Software, hauptsächlich kleine Kommandozeilen-Tools.

Kategorie: Gastblog

  1. Pingback: blog:2011-09:19_oepnv_karten_mit_osm [ConsEbt]