Ö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. zion2k

    Hallo,
    gibt es irgendwo ein fertiges Image für Garmin Geräte zum Download?

  2. kelvan

    schaut ganz gut aus, nur warum öffnet ein klick auf eine station ein bahn.de-tab? bahn.de hat keine Daten für Öffis in anderen Ländern. Die Anzeige in der öpnvkarte war dagegen echt sinnvoll.
    ich fände es mal gut wenn die ubahnen mit der richtigen farbe angezeigt werden würden, hab noch keine karte gesehen die die color tags bei ubahnen auswertet.

  3. Andi

    @kevlan: soweit ich weiß kann man mit Mapnik keine Parameter aus den Daten zum Rendern verwenden. Mit anderen Renderen, wie z.B. Kothic bzw. generell Renderer die MapCSS mit eval() unterstützen, geht das aber durchaus.

    @markus: Der Pfeil zwischen “neue gefilterte Daten” und “osmconvert” zeigt in die falsche Richtung

  4. !i!

    Hey danke für den ausführlichen Bericht, gerade auch die technischen Details 🙂 Muss mir die Tools mal bei mehr Zeit zu Gemüte führen.

  5. Markus

    @zion2k: Meines Wissens verwenden die Garmin-Geräte Vektor-Grafiken, die z.B. mit dem Programm mkgmap ins Garmin-Format konvertiert werden können. Natürlich ist es auch dort möglich, ÖV-Linien darzustellen, aber das wäre leider eine ganz andere Baustelle.

    @kelvan: Die DB hat die Bahn-Fahrplandaten nicht nur für Deutschland, sondern für ganz Europa. Ein Portal, das weltweite Daten anbietet habe ich leider nicht gefunden, sonst hätte ich es verlinkt. Kennst du eines?
    Deinen Hinweis mit der öpnvkarte.de verstehe ich grad nicht, soweit ich weiß, zeigt die öpnvkarte gar keine Fahrplandaten an, sondern nur die Linieninformationen, die bei OSM gespeichert sind.
    Was ist “die richtige Farbe” für U-Bahnen? Ich persönlich hab sie am liebsten blau, dann weiß ich sofort, dass das eine U-Bahn ist. Jede Stadt verwendet ein anderes Farbschema, manche Städte zwei oder drei verschiedene. Schau dir mal München an, da gibts Farben für S-Bahnen, U-Bahnen und Tram. Wenn du das alles darstellen willst, hast du nur noch eine bunte Suppe, und keiner weiß mehr was was ist. 🙂

    @Andi: Müsste mit Mapnik prinzipiell auch gehen. Notfalls muss man das Style-File dynamisch ändern. Aber das ist natürlich nicht Sinn der Sache, da hast du Recht. 🙂
    Und ja, der Pfeil ist falsch, danke für den Tipp! 🙂 Leider kann ich ihn selber nicht ändern, ich hab keine Schreibrechte. Hab das Blog-Team per Mail drum gebeten.

    @!i!: Gern. 🙂 War mein erster Blog-Beitrag überhaupt, hoffe, es ist alles verständlich rübergekommen.

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

  7. Andi

    @Markus: er meinte pro U-Bahnlinie eine unterschiedliche Farbe. Dazu gibt es in der entsprechenden Relation eben nen color Tag. In München wäre der Wert davon z.B. für die U2 rot, für die U3 orange usw… Und das kann Mapnik eben nicht, es sei den man schreibt die Farben fest ins Stylefile.

  8. Andi

    @kevlan: Markus hat eine Karte gefunden die den color-Tag der Relation auswertet: http://3liz.fr/public/osmtransport/

    Beispiel-Relation mit color Tag: http://www.openstreetmap.org/browse/relation/123652

  9. Chrisss

    Hallo ich finde diese Seite super praktisch,
    eine Anregung: Man könnte noch hinzufügen, dass man einen Anfangsmarker, einen Endmarker und evtl. noch höchstens 2 Zwischenmarker setzen kann. Dann drückt man auf einen Button; und es werden die nächstliegenden Objekte (normalerweise Gebäude) mit Adressen zu den Markern gesucht. Diese Adressen werden dann automatisch zur mobilen Bahnwebsite unter dem Punkt von “Tür zu Tür”
    (http://mobile.bahn.de/bin/mobil/query.exe/dox?country=DEU&rt=1&use_realtime_filter=1&webview=&searchMode=ADVANCED)
    verlinkt und in “Von”, “Nach” und evtl. in “Über” eingegeben und somit werden dann die Verbindungen angezeigt.