Darstellung von OPNV-Karten aus OpenStreetMap

Die Seite wird erstellt Lisa Wolter
 
WEITER LESEN
Darstellung von OPNV-Karten aus OpenStreetMap
Freie Universität Berlin
 Fachbereich Mathematik und Informatik
         Institut für Informatik
      Arbeitsgruppe Datenbanken und
           Informationssysteme

                   Bachelorarbeit

      Darstellung von
     ÖPNV-Karten aus
      OpenStreetMap

                       vorgelegt von

                  Ramdane Sennoun
                     4304440
                   am 03.08.2012

Gutachter:   Prof. Dr. Agnès Voisard, Prof. Dr. Elfriede Fehr
Betreuer:    Sebastian Müller
Darstellung von OPNV-Karten aus OpenStreetMap
Darstellung von OPNV-Karten aus OpenStreetMap
Eidesstattliche Erklärung
Ich erkläre hiermit an Eides Statt, dass ich die vorliegende Bachelorarbeit
selbständig angefertigt habe. Die aus fremden Quellen direkt oder indirekt
übernommenen Gedanken sind als solche kenntlich gemacht.

Die Arbeit wurde bisher weder in gleicher noch in ähnlicher Form einer
anderen Prüfungsbehörde vorgelegt und auch nicht veröffentlicht.

03.08.2012

Ramdane Sennoun
Darstellung von OPNV-Karten aus OpenStreetMap
Zusammenfassung
    Heutzutage erleichtern Smartphones mit der integrierten Naviga-
tion die Suche nach Straßen oder öffentlichen Verkehrsmöglichkeiten.
Viele der Funktionen wie zum Beispiel der Abfrage nach ÖPNV-Daten
erfordern oft eine bestehende Internetverbindung, die jedoch nicht je-
derzeit vorhanden ist. In dieser Arbeit wird ein geeignetes Werkzeug
entwickelt, das alle ÖPNV-relevanten Daten aus OpenStreetMap extra-
hiert und offline auf Android-basierten Geräten darstellen kann. Dazu
werden die extrahierten Daten so in einem eingebetteten Datenbank-
system gespeichert werden, dass effiziente Suchanfragen wie z.B. nach
naheliegenden Stationen möglich sind. Das fertige System soll nicht
nur für Berlin, sondern auch für andere Regionen im In- und Ausland
einsetzbar sein.

                              Abstract
Nowadays smart phones with integrated navigation make it easier to
search for roads or public transport information. Many features such
as discovering nearby stations often require an internet connectivity,
which is not available sometimes. The main goal of this thesis is to de-
velop a tool that extract public transportation data (metro, suburban
train, bus, tram, regional trains, high speed trains, ferry, cable car)
from OpenStreetMap to provide that data on Android devices without
any internet connection required. The extracted data must be impor-
ted into an embedded database system with efficient queries provided.
The tool shall be adaptable for every region.
Inhaltsverzeichnis
1 Einführung                                                                               1
  1.1 Motivation und Ziele . . . . . . . . . . . . . . . . . . . . . . .                    1
  1.2 Aufgabenstellung und Arbeitsumfeld . . . . . . . . . . . . . .                        2
  1.3 Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . .                     3

2 Grundlagen                                                                                 4
  2.1 OpenStreetMap . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .    4
      2.1.1 Das OSM-Datenformat . . . . . . . . .           .   .   .   .   .   .   .   .    5
      2.1.2 Zugriff auf die OSM-Daten mit Osmosis           .   .   .   .   .   .   .   .    7
  2.2 Das Mapsforge-Projekt . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .    7
      2.2.1 Rendertheme API . . . . . . . . . . . .         .   .   .   .   .   .   .   .    7
      2.2.2 Overlay API . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .    8
  2.3 ÖPNV - Öffentlicher Personennahverkehr . . .        .   .   .   .   .   .   .   .    8
      2.3.1 Allgemein . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .    9
      2.3.2 OSM und ÖPNV . . . . . . . . . . . . .         .   .   .   .   .   .   .   .    9
  2.4 GTFS - General Transit Feed Specification . .         .   .   .   .   .   .   .   .   11

3 Implementierung des Datenbanksystems                                                      13
  3.1 Extrahierung der Daten - ÖPNV-Writer . . .         . . . . . . . . .                 13
      3.1.1 Vorverarbeitung der ÖPNV-Daten aus           OpenStreetMap                     15
      3.1.2 Das Osmosis-Plugin . . . . . . . . . .        . . . . . . . . .                 17
  3.2 Die ÖPNV-Datenbank . . . . . . . . . . . . .       . . . . . . . . .                 18
      3.2.1 Entwurf des Datenbanksystems . . . .          . . . . . . . . .                 18
      3.2.2 Das Datenbankschema . . . . . . . . .         . . . . . . . . .                 25
  3.3 R-Baum und R*-Baum . . . . . . . . . . . . .        . . . . . . . . .                 27
      3.3.1 Suchen . . . . . . . . . . . . . . . . . .    . . . . . . . . .                 29
      3.3.2 Einfügen . . . . . . . . . . . . . . . . .   . . . . . . . . .                 31
      3.3.3 SplitNode - Teilung eines Knotens . .         . . . . . . . . .                 33
      3.3.4 R*-Baum . . . . . . . . . . . . . . . .       . . . . . . . . .                 35
  3.4 SQLite und R*-Baum . . . . . . . . . . . . .        . . . . . . . . .                 36
      3.4.1 Das angepasste Datenbankschema . .            . . . . . . . . .                 36
  3.5 Die Programmierschnittstelle . . . . . . . . .      . . . . . . . . .                 37
  3.6 Android-Applikation . . . . . . . . . . . . . .     . . . . . . . . .                 38

4 Evaluation                                                          41
  4.1 Evaluation des Systems zur Erstellung der Datenbank . . . . 41
  4.2 Evaluation der Datenbank - Laufzeiten . . . . . . . . . . . . . 43

5 Fazit                                                               47
  5.1 Ausblick und Verbesserungen . . . . . . . . . . . . . . . . . . 47
6 Anhang                                                                        49
  6.1 Dateien, Grafiken . . . . . . . . . . . . . . . . . . . . . . . .     .   49
      6.1.1 Erstellung der SQLite-Datei aus dem Kartenmaterial              .   49
      6.1.2 Proto-Rendertheme . . . . . . . . . . . . . . . . . .           .   50
  6.2 Statistiken . . . . . . . . . . . . . . . . . . . . . . . . . . . .   .   52
      6.2.1 Speicherplatzverbrauch der Kartenformate . . . . . .            .   52
      6.2.2 Speicherplatzverbrauch der erstellten Datenbanken .             .   53
1 Einführung                                              Ramdane Sennoun

1     Einführung
Die Nutzungsmöglichkeiten und Funktionen von Smartphones, die Handy,
Kamera und Mp3-Player miteinander kombinieren, werden durch mobiles
Internet und Applications (Apps) um ein Vielfaches erweitert. Es kann über
den Browser im Internet gesurft werden, es können über Apps E-Mails abge-
rufen und versendet werden oder man erleichtert sich die Suche nach Straßen
oder öffentlichen Verkehrsmöglichkeiten mit der integrierten Navigation.
Viele der Funktionen wie zum Beispiel der Abfrage nach ÖPNV-Daten (z.B.
zu U-Bahn- und S-Bahn-Linien, Busstationen, usw.) setzen oft eine Internet-
verbindung voraus, wenn solche Daten nicht offline auf dem eigenen Gerät
abgespeichert sind. Allerdings nutzt nicht jeder, der ein internetfähiges Han-
dy oder ein Smartphone besitzt und unterwegs ist, das mobile Internet. Hohe
Verbindungskosten können ein Grund sein. Der mobile Zugang zum Internet
ist auch nicht jederorts verfügbar. So deckt der Ausbau des Mobilfunknet-
zes noch nicht alle Bereiche ab. Nicht überall in den U-Bahn-Systemen der
großen Städte ist das Mobilfunknetz so ausgebaut, so dass jederzeit das mo-
bile Internet genutzt werden kann[28].
Was für- und wie kann man den Nutzern (z.B. Touristen) Daten bereitstel-
len, um mobil auf ÖPNV-Daten (z.B. Standorte, Service) und ÖPNV-Karten
(Streckenlinien und Streckenverläufe von U-Bahn, S-Bahn, usw.) zugreifen
zu können, ohne von Anbietern proprietärer Daten abhängig zu sein oder
Geld für das Kartenmaterial zu zahlen?

1.1   Motivation und Ziele
Das Mapsforge-Projekt [26], welches 2008 an der Freien Universität Berlin
gegründet wurde und im nächsten Kapitel genauer vorgestellt wird, stellt
Bibliotheken bereit, die für Android [16]-basierte Geräte folgende Lösungen
bietet: Darstellung von Kartenmaterial (Maprendering) und Kartenoverlays
sowie die Routenplannung und Navigation als auch die Suche von Points of
Interest (POIs).
OpenStreetMap [29] (OSM) unterstützt Personen beim Navigieren und Ori-
entieren und ist einer der wenigen Kartendienste, die einfache Routenpla-
nung ermöglicht, da ebenso, auch wenn nicht vollständig, Fahrplaninforma-
tionen des öffentlichen Verkehrs erfasst werden. Der Öffentliche Personen-
nahverkehr (ÖPNV) war schon im Sommer 2009 das Thema einer umfas-
senden Diplomarbeit [42] über den Entwurf und die Implementierung eines
Schemas zur Erfassung nutzbarer ÖPNV-Daten in OpenStreetMap.
Ziel dieser Arbeit ist es nun, ein geeignetes Werkzeug zu entwickeln, um
alle ÖPNV-relevanten Daten (über U- und S-Bahnen, Straßenbahnen, Bus-
se, Fähren,...) aus OpenStreetMap zu extrahieren und offline auf Andro-
id -basierten Geräten darzustellen. In ÖPNV-Netzen sind unterschiedliche

                                                                             1
1.2    Aufgabenstellung und Arbeitsumfeld                  Ramdane Sennoun

Darstellungen üblich, besonders andere Regionen im In- und Ausland ha-
ben höchstwahrscheinlich unterschiedliche Verkehrsbetriebe und dem ent-
sprechend unterschiedliche Darstellungsweisen.

1.2      Aufgabenstellung und Arbeitsumfeld
Das Ziel des Mapsforge-Projekts [26] ist es, Bibliotheken zu implementie-
ren und zur Verfügung zu stellen, damit Kartenanwendungen auf Android-
Geräten sie nutzen können. Viele der Komponenten waren Ergebnisse von
Abschlussarbeiten. In dieser Arbeit soll das Mapsforge-Projekt um eine wei-
tere Komponente erweitert werden.
Alle relevanten Daten zum Öffentlichen Personennahverkehr, die in Open-
StreetMap erfasst worden sind, müssen extrahiert werden und so in einem
eingebetteten Datenbanksystem gespeichert werden, dass effiziente Anfragen
und Verknüpfungen zu Online-Informationen (z.B eine Webseite mit aktuel-
len Abfahrtszeiten oder ein Wikipedia-Artikel zu einer bestimmten Station)
möglich sind.

      • Herkömmliche Applikationen für den Öffentlichen Personennahverkehr
        auf Android, wie die bekannte Öffi -Applikation [41], oder für App-
        les iOS [17] FahrInfo - Mobile Trip Planner [23] setzen für die Su-
        che von nahegelegenen Haltestellen oder Abfahrtszeiten eine Internet-
        verbindung voraus. Es soll also ein Datenbanksystem entworfen und
        implementiert werden, das die extrahierten ÖPNV-Daten aus Open-
        StreetMap offline auf dem Android-Gerät speichert und verwaltet. Die
        Anfragen sollen dementsprechend offline erfolgen.

      • Die Suchergebnisse müssen offline als Overlay auf der OpenStreetMap-
        karte dargestellt werden, mit denen der Nutzer auch interagieren kann.
        Zur Darstellung in Android existiert bereits eine Softwarebibliothek
        aus dem Mapsforge-Projekt, welche neben dem Rendern einer Basis-
        karte über Schnittstellen zur Anzeige von Overlays verfügt.

      • Das Ergebnis soll eine lauffähige Android-Applikation sein, die eine
        ÖPNV-Karte darstellt, mit der der Nutzer interagieren und Suchan-
        fragen stellen kann.

2
1.3   Aufbau der Arbeit                                 Ramdane Sennoun

1.3    Aufbau der Arbeit
Der Aufbau dieser Arbeit geht mit der Entwicklung des Systems einher. Im
ersten Schritt müssen die erforderlichen Daten aus OpenStreetMap bezogen
werden. Danach müssen diese in ein geeignetes Datenbanksystem überführt
werden. Im darauffolgenden Teil muss eine Bibliothek entwickelt werden,
die das Lesen der Daten auf einem mobilen Android-Endgerät ermöglicht.
Am Schluss muss die Android-Applikation implementiert werden, die die
ÖPNV-Karte darstellt und das Interagieren mit dem Nutzer ermöglicht.

1. Extrahierung der Daten
Am Anfang müssen alle Daten, die für den ÖPNV-Gebrauch nützlich sind,
aus OpenStreetMap bezogen und gespeichert werden. Sind die Daten extra-
hiert, müssen sie anhand eines Datenbankschemas in ein Datenbanksystem
überführt werden.

2. Entwurf und Implementierung des Datenbanksystems
Als zweiter Schritt muss ein geeignetes Datenbankschema entworfen wer-
den, welches die extrahierten ÖPNV-Daten in strukturierter Weise zusam-
menfasst und einen effizienten Zugriff ermöglicht. Es sollen Abfragen nach
Stationen, nach umliegenden Haltestellen und nach Verkehrslinien möglich
sein. Als Ergebnis wird eine SQLite-Datei erstellt, die alle nötigen dazu-
gehörigen Informationen enthält.

3. Implementierung einer Reader-Bibliothek für Android
Ist die Implementierung des Datenbanksystems abgeschlossen und sind die
extrahierten Daten in eine SQLite-Datenbank überführt worden, kann ei-
ne Reader-Bibliothek implementiert werden, mit der Android-Anwendungen
auf die Datenbank zugreifen und Suchanfragen stellen kann.

4. Android-Applikation
Zum Schluss wird eine Android-Applikation entwickelt, die mittels der Da-
tenbank und eines eigenen Render-Schemas eine ÖPNV-Karte darstellt, mit
der der Nutzer z.B. durch einen Klick auf eine Station interagieren kann.
Dazu sollen die aus der Datenbank enthaltenen ÖPNV-Informationen über
die Stationen für den Benutzer zur Verfügung stehen.

                                                                         3
2 Grundlagen                                             Ramdane Sennoun

2     Grundlagen
In diesem Kapitel werden einige technische Mittel und Grundlagen zum
Öffentlichen Personennahverkehr vorgestellt, auf denen das System aufbaut.

2.1   OpenStreetMap
Als Kartenmaterial wird in dieser Arbeit OpenStreetMap (OSM) verwen-
det, weil jeder die Daten lizenzkostenfrei (gemäß der Creative-Commons-
Attribution-ShareAlike-2.0-Lizenz [20]) benutzen und weiterverarbeiten kann.
Das OpenStreetMap-Projekt wurde 2004 in Großbritannien gegründet. Mitt-
lerweile erfasst das Projekt dank der weltweit über 630 Tausend Freiwilligen,
die die Geodaten über Straßen, Flüsse, Orte, Wälder, usw. bisher sammel-
ten, mehr als 2,9 Milliarden GPS Punkte, 1,5 Milliarden Punkte und 14
Millionen Wege[30].
Aufbauend auf den in einer Datenbank gespeicherten Daten lassen sich Stra-
ßenkarten für Autofahrer, Wander- und Fahrradkarten erzeugen oder An-
wendungen entwickeln, die der Navigation und Routenberechnung dienen.
Auf der OpenStreetMap-Website gibt es eine Weltkarte, die jeder lesen und
auch mitgestalten kann. Ähnlich der Anbieter anderer Kartendienste lässt
sich die Karte mit gedrückter Maustaste verschieben oder mit einem Dop-
penklick vergrößern.

      Abbildung 2.1: Weltkarte auf der OpenStreetMap-Website [29]

Im folgenden Abschnitt soll das relativ abstrakte Datenmodell von Open-
StreetMap beschrieben werden, mit dem die zentrale OpOSM-Datenbank die
Informationen über Straßen, Wege, Grenzen, Gewässer, Sehenswürdigkeiten
und vieles mehr organisiert. Zudem bildet es die Grundlage für das XML-
Format, durch das OSM-Daten ausgetauscht werden.

4
2.1    OpenStreetMap                                                  Ramdane Sennoun

2.1.1     Das OSM-Datenformat
Grundlegend kann zwischen zwei wichtigen Objekttypen unterschieden wer-
den - den Knoten und den Wegen. Es werden diesen Objekten Attribute
zugeordnet, die zur Beschreibung dienen - den Tags. Der Datentyp Relation
modelliert die Beziehungen zwischen verschiedenen OSM-Objekten, die je-
weils eine XML-Repräsentation haben. Knoten (Nodes), Wege (Ways) und
Relationen stehen also in verschiedenster Weise in Beziehungen (vereinfach-
te Darstellung in Abbildung 2.2) und bilden die OpenStreetMap-Karte. Die

      Abbildung 2.2: OSM-Datenformat - Knoten, Wege und Relationen

jeweiligen Objekte der drei OSM-Objekttypen sind mit einer eindeutigen
ID in Form einer Nummer gekennzeichnet. Des Weiteren können Tags zu-
geordnet werden, um die Objekte zu beschreiben. Es können beliebig viele
Tags gespeichert werden, die z.B. Informationen zu Straßennamen, Haus-
nummern oder Geschäften beinhalten. Ein Tag besteht aus einem Schlüssel
(Key), dem einen Wert (Value) zugeordnet wird (”Key=Value”). Bestimm-
te Tags werden für für die Beschreibung von Haltestellen und Öffentlichen
Verkehrslinien/Bahnlinien von Bedeutung sein.

      • Knoten (Nodes) enthalten neben der ID und den optionalen Tags auch
        Informationen über die geographische Lage. Längen- und Breitengrade
        müssen u.a. in einer Datenbank gespeichert werden, um die Haltestel-
        len auf der Karte positionieren zu können.
         
                                                                                          5
2.1    OpenStreetMap                                                        Ramdane Sennoun

      • Wege (Ways), die aus einer geordneten Liste von mindestens zwei
        Nodes bestehen, bilden linienförmige Objekte wie Grenzen, Straßen,
        Flüssen, Gebäudemauern und ähnliches ab. Sind Anfangs- und End-
        knoten identisch, so wird eine Fläche abgebildet. So können Gebäude,
        Seen oder Wälder dargestellt werden. Ways enthalten den genauen
        Verlauf von Bus- oder Bahnlinien und können später in der Anwen-
        dung durch ein eigenes Rendertheme hervorgehoben werden.
         
      • Relationen modellieren die Beziehungen zwischen Objekten, die jeweils
        eine Instanz der drei Objekttypen sein können. Die Objekte sind Teil-
        nehmer (Member) einer geordneten Liste und bekommen eine Rolle
        zugewiesen. Die Relation boundary gruppiert z.B. Grenzen, wogegen
        die Relation waterway die Gewässerlinien repräsentiert. Im Hinblick
        dieser Arbeit spielt die etablierte Relation route eine wichtige Rolle,
        da sie Buslinien (route=bus), U-Bahn-Linien (route=subway), S-Bahn-
        Linien (route=light rail ) und andere Nahverkehrslinien modelliert.
         < r e l a t i o n i d=” 58428 ” v e r s i o n=” 22 ” timestamp=”2012−06−14
                T12 : 2 4 : 0 7 Z” u i d=” 304565 ” u s e r=” s t e f a n −s ” c h a n g e s e t=”
                11894666 ”>
                  ...
                
                  ...
                
                  ...
                
6
2.2   Das Mapsforge-Projekt                                      Ramdane Sennoun

Mehr Details zu OpenStreetMap-Karten, zum Mapping und zum Tagging
können im Buch von Frederick Ramm und Joch Topf nachgelesen werden.
[39]

2.1.2    Zugriff auf die OSM-Daten mit Osmosis
Das Java-Programm Osmosis [32], entwickelt von Brett Henderson, ist ein
universelles Filter- und Konvertierer-Tool für Daten aus OpenStreetMap. In
der Befehlszeile wird zum einen die Datenquelle sowie das Ziel der Ausga-
bedatei angegeben, zum anderen können optional weitere Filter- und Verar-
beitungsmodule (tasks) festgelegt werden. Um die relevanten ÖPNV-Daten
aus OpenStreetMap zu extrahieren, um daraus eine ÖPNV-Karte zu erstel-
len, wurde ein Osmosis-Plugin implementiert, das die verarbeiteten Daten
in eine SQLite-Datenbank speichert und verwaltet. In Kapitel 3.1.2 wird
detaillierter auf Osmosis eingegangen.

2.2     Das Mapsforge-Projekt
Das Mapsforge-Projekt [26] startete 2008 an der Freien Universität Berlin
als Studentenprojekt und stellt Softwarebibliotheken für OpenStreetMap-
basierte Android-Anwendungen bereit. Neben dem Anzeigen von Kartenda-
ten (Rendering) ermöglicht es auch offline Routenplanung sowie die Suche
nach Point of Interests (POIs) um einen vorgegeben Radius.

2.2.1    Rendertheme API
Durch die Rendertheme API von der mapsforge-map-Bibliothek ist es möglich,
die dargestellte Karte im eigenen Stil zu visualisieren. Es wurde zur Darstel-
lung der ÖPNV-Karte ein eigenes Rendertheme geschrieben, das zur Lauf-
zeit je nach Einstellung im Android-Einstellungsmenü beliebig geändert und
aktiviert werden kann. Das folgende Beispiel zeigt eine kleine Renderinstruk-
tion, bei der Gebäude vor den Straßenbahn- und U-Bahn-Linien gerendert
werden und dementsprechend letztere über den Gebäudelinien erscheinen.
 
                                                                                      7
2.3     ÖPNV - Öffentlicher Personennahverkehr                               Ramdane Sennoun

                 < l i n e s t r o k e=”#c c 0 0 0 0 ” s t r o k e −width=” 0 . 7 0 ” s t r o k e −
                         l i n e c a p=” b u t t ” />
            
                    < l i n e s t r o k e=”#003399” s t r o k e −width=” 1 . 0 ” s t r o k e −
                              l i n e c a p=” b u t t ” />
            
Im Abschnitt 3.6 wird auf das für diese Arbeit entworfene Rendertheme ein-
gegangen und die Designentscheidungen zur Darstellungen der Haltestellen
und öffentlichen Straßen-, Schienen- und Schiffsverkehrslinien getroffen.

2.2.2       Overlay API
In Abbildung 2.3 sind einige Overlay-Beispiele [27] dargestellt, die in der Ap-
plikation für die Markierung von Suchresultaten und Haltestellen verwendet
werden.

                              Abbildung 2.3: Overlay-Beispiele

2.3       ÖPNV - Öffentlicher Personennahverkehr
In den zwei darauf folgenden Abschnitten soll allgemein auf die Bedeutung
vom ÖPNV in Städten eingegangen werden sowie die Erfassung von Infor-
mationen über die Infrastruktur von Straßen-, Schienen- und Schiffsverkehr
in OpenStreetMap aufgezeigt werden.

8
2.3 ÖPNV - Öffentlicher Personennahverkehr               Ramdane Sennoun

2.3.1    Allgemein
Als öffentlicher Personennahverkehr (ÖPNV) wird in Deutschland die Beför-
derung von Personen mit Fahrzeugen des Straßen-, Schienen- und Schiffs-
verkehrs im Linienverkehr bezeichnet, das durch private oder kommunale
und gemischt-wirtschaftliche Unternehmen sowie Regionaleisenbahngesell-
schaften getragen und durch Bund, Länder und Gemeinden gefördert wird
[6]. Die Aufgabenträger haben hohe Anforderungen zu erfüllen und müssen
über Verkehr und Strukturen sehr gut ausgebildet sein. Die Planung erfolgt
über den Verknüpfungspunkten, also den anzusteuernden Haltestellen bzw.
Quellen/Zielen, und den Reisezeiten sowie den Taktvorgaben bis hin zur
Erfüllung der Mindeststandards im Bezug auf Emissionswerte und Fahr-
gastzahlen. Kundenzufriedenheit, Marketing, Vertrieb und Verkauf dürfen
natürlich nicht fehlen.

2.3.2    OSM und ÖPNV
ÖPNV [31] nimmt auch in OpenStreetMap eine wichtige Rolle ein und ist
für die Kartographen eine große Herausforderung. Das Tagging vom ÖPNV
in Städten soll den Nutzern neben dem Navigieren und Orientieren auch die
Routenplanung unter Verwendung des öffentlichen Verkehrs ermöglichen.
Um diesem Ziel zu folgen, muss die Infrastruktur in OpenStreetMap erfasst
werden. Grundlegend wird zwischen linienhafter und punkthafter Infrastruk-
tur sowie den Netzwerkinformationen unterschieden.

Linienhafte Infrastruktur (Gleise, Straßen)
In Tabelle 2.1 sind die für diese Arbeit wichtigsten Tags in dieser Rubrik
nach den Typen (Eisenbahn, Straßenbahn, . . . ) aufgelistet. Busspuren ha-

               Key       Value                   Typ
             railway      tram            Straßenbahngleise
             railway    subway             U-Bahn-Gleise
             railway       rail     Eisenbahngleise (z.B. DB, etc.)
             railway   light rail           S-Bahn-Gleise
             railway   funicular            Standseilbahn

        Tabelle 2.1: ÖPNV-Tagging in OSM: Linienhafte Infrastruktur

ben die linienhaften Infrastrukturen in den Straßen und werden z.B. auf den
Busbahnhöfen mit dem Key-Value-Pair highway=service getaggt.

                                                                          9
2.3   ÖPNV - Öffentlicher Personennahverkehr             Ramdane Sennoun

Punkthafte Infrastruktur (Haltestellen)
Unter diesem Punkt werden alle Haltestellen zusammengefasst. Dazu gehören
Bahnsteige, die Haltepositionen der öffentlichen Verkehrsmittel und ähnliches.
Heute gebräuchliche Tags in Bezug auf den öffentlichen Personennahverkehr
sind in Tabelle 2.2 aufgelistet. Bisher konnte sich noch kein einheitliches

         Key-Value-Pair                           Bedeutung
         railway=station                            Bahnhof
           railway=halt                        Bahn-Haltepunkt
        railway=tram stop                    Straßenbahnhaltestelle
        highway=bus stop                         Bushaltestelle
 public transport*=stop position           Haltepunkt des Fahrzeugs
   public transport*=platform        Bahnsteig als Node, Way oder Fläche
   public transport*=stop area        in einer Relation zusammengefasste
                                     Haltepunkte und Bahnsteige zu einem
      *neueres Tagging-Schema                     Gesamthalt

      Tabelle 2.2: ÖPNV-Tagging in OSM: Punkthafte Infrastruktur

Tagging-Schema zum ÖPNV etablieren, trotzdem werden die meisten Daten
so erfasst, dass Details zu Netzinformationen vorhanden sind. Innerhalb der
OSM-Community gibt es in Form von Wiki-Unterprojekten einige Schwer-
punkte, die sich auf auf den ÖPNV beziehen. Das ÖPNV-Schema wurde
einer umfangreichen Bestandsanalyse unterzogen und hat an vielen Stellen
eine Anpassung oder Erweiterung nötig. Genauere Ergebnisse können in der
bereits referenzierten Diplomarbeit von Schwarz nachgelesen werden.

Netzwerkinformationen (Verkehrsverbünde, Linien)
Unter den Netzwerkinformationen versteht man die Daten, die die Details
zu den als Relationen erfassten Bahn- oder Buslinien darstellen. Straßen,
Schienenwege und Haltepositionen sind die möglichen Members einer Rela-
tion und sind in der Reihenfolge aufgelistet, wie sie gefahren werden. Um die
Relation als Route zu kennzeichnen, wird das Key-Value-Paar type=route
verwendet. Die Werte tram, subway, rail, light rail, ferry und bus werden
dem Schlüssel route zugeordnet.
Die Schlüssel from und to enthalten Inhalten bei Vorhandensein Informa-
tionen über den Start und das Ziel einer Verkehrslinie. ref beinhaltet die
Bezeichnung der Linie (z.B. U2), network enthält die Information über das
Liniennetz (z.B. VBB) und operator ist die Betreibergesellschaft (z.B. BVG).
In unserer Arbeit müssen möglichst viele Tags erfasst und extrahiert wer-
den, die als relevante ÖPNV-Daten in eine seperate SQLite-Datenbank im-
portiert werden können, um daraus eine ÖPNV-Karte darzustellen und sie
als Android-basierte Anwendung anbieten zu können.

10
2.4    GTFS - General Transit Feed Specification             Ramdane Sennoun

Dazu wurde eine Datenbanksystem (Kapitel 3: Plannung, Entwurf und Im-
plementierung) entworfen, dass die erforderlichen Daten speichert.

2.4      GTFS - General Transit Feed Specification
GTFS [24] - General Transit Feed Specification - ist ein von Google ent-
worfenes Format, das öffentliche Verkehrssysteme einer Region abbildet und
ÖPNV- und Geodaten erfasst und in Form von Text-Dateien bzw. im CSV-
Format speichert, die in einer zip-Datei gepackt sind. Der Inhalt umfasst
spezifische Daten wie Abfahrtszeiten oder Informationen zu Linienverläufen
und Haltestellen. Die Spezifikation definiert 13 Dateien, wovon sechs obli-
gatorisch und die restlichen sieben optional sind. Das UML-Diagramm in
Abbildung 2.4 zeigt die Beziehungen zwischen den Google Transit-Objekten
sowie deren öffentlichen GTFS-Attributen.

                     Abbildung 2.4: GTFS-Spezifikation [25]

      • agency.txt (obligatorisch): In der Datei agency.txt werden die Betrei-
        ber von öffentlichen Verkehrsdiensten definiert, die den Feed erstellen.
        Es können mehrere Betreiber in einer Datei definiert werden.

      • stops.txt (obligatorisch): Die Haltestellen werden in der Datei stops.txt
        aufgelistet. Sie enthält die Informationen über die geographische Lage,

                                                                              11
2.4    GTFS - General Transit Feed Specification              Ramdane Sennoun

        den Namen und optional eine URL, eine Beschreibung und ähnliches
        über die Station bereit.

      • routes.txt (obligatorisch): In dieser Datei werden alle öffentlichen Ver-
        kehrslinien gespeichert. Die Routen sind zeitunabhängig und umfassen
        einen oder mehrere zeitabhängige Trips.

      • trips.txt (obligatorisch): Ein Trip ist eine Fahrt entlang einer Route zu
        einer bestimmten Zeit und ergibt sich aus einer Folge von StopTimes.

      • stop times.txt (obligatorisch): Die StopTime enthält Daten zur Auf-
        enthaltsdauer sowie die Ankunfts- und Abfahrtszeit eines Fahrzeuges
        entlang einer in trips.txt definierten Strecke.

      • calendar.txt (obligatorisch): Der Datumsbereich und die Wochentage,
        an denen ein Trip stattfindet werden als Service in dieser Datei fest-
        gelegt.

      • calendar dates.txt (optional): In calender dates.txt werden bestimm-
        te Tage (z.B. Feiertage) definiert, an denen eine Fahrt (Trip) nicht
        stattfindet oder eine Route außerplanmäßig gefahren wird.

      • fare attributes.txt (optional): Gültigkeit, Preis und Währung einer Fahr-
        karte werden in diesem GTFS-Objekt festgelegt..

      • fare rules.txt (optional): FareRules legen die Beförderungsbedingungen
        fest, die die Passagiere einzuhalten haben.

      • shapes.txt (optional): Shapes werden bestimmten Trips zugeordnet und
        enthalten die Geokoordinaten einer abzufahrenden Strecke eines Fahr-
        zeuges.

      • frequencies.txt (optional): Linien, die keine festen Abfahrts- und An-
        kunftszeiten haben und in einem bestimmten Takt verkehren, werden
        eine Frequenz zugeordnet, die in frequencies.txt definiert sind.

      • transfers.txt (optional): Umstiegsmöglichkeiten und -dauer für eine
        Haltestelle werden in transfers.txt festgelegt.

      • feed info.txt (optional): In dieser Datei werden zusätzliche Informatio-
        nen (z.B. zum Publisher, der sich oft von der Agency unterscheidet)
        über den Feed selbst gespeichert.

Für diese Arbeit diente das Format von Google nur als Vorbild für das Daten-
bankschema, das in Kapitel 3 beschrieben wird. Es reichen die OSM-Daten
nicht dazu aus, um ein minimalen GTFS-Feed zu erstellen, da z.B. Abfahrts-
zeiten nicht in OpenStreetMap erfasst werden. Es ist aber eine Parallelität
zu den GTFS-Objekten Stops und Routes vorhanden.

12
3 Implementierung des Datenbanksystems                           Ramdane Sennoun

3       Implementierung des Datenbanksystems
Das komplette System wurde als Android-Applikation, dem PublicTrans-
portViewer, implementiert. Der Benutzer hat die Möglichkeit, offline und
per Eingabe nach öffentlichen Verkehrshaltestellen zu suchen und sich die
Suchergebnisse auf der ÖPNV-Karte darstellen zu lassen. Weitere Suchop-
tionen sind die Suche nach Stationen einer öffentlichen Verkehrslinie (z.B.
U2, M48, etc.) oder das Anzeigen der am nächsten gelegenen Haltestellen im
Umkreis von bis zu 500 Metern. Des Weiteren kann der Benutzer mit einem
Klick auf das Icon einer Station weitere Informationen über die Haltestelle
bekommen, die in einem Pop-up-Fenster dargestellt werden. Hierzu muss die
Stadtkarte und die Datenbank, die die ÖPNV-Daten enthält, vom Anwender
auf dem Telefon kopiert werden. Die Karte ist eine vom mapsforge-Osmosis-
Plugin erstellte .map-Datei, die ÖPNV-Datenbank ist eine .sqlite-Datei.
In den folgenden Abschnitten wird das Datenbankschema für die erfassten
ÖPNV-Daten sowie die wichtigsten Klassen, die das Schreiben und Lesen
der Datenbank erledigen, vorgestellt.

3.1       Extrahierung der Daten - ÖPNV-Writer
In Kapitelabschnitt 2.1.2 wurde schon auf das in Java geschriebene Filter-
und Kovertierer-Tool Osmosis [32] eingegangen, das zur Extrahierung der
OpenStreetMap-Daten eingesetzt wird. OpenStreetMap-Daten können in
beliebigen Formaten repräsentiert und gespeichert werden. Die Beispiele zu
Knoten, Wegen und Relationen aus Kapitel 2.1.1 zeigen das OSM-Datenformat
in XML-Repräsentation [22]. Eine weitere wichtige und deutlich weniger
Speicher verbrauchende Repräsentation des OSM-Datenformats ist Googles
effiziente System zum Serialisieren strukturierter Daten, dem Protocol Buf-
fer (kurz pbf) [7], auf das nicht weiter detailliert eingegangen wird.

XML - Extensible Markup Language

Die Extensivle Markup Language, kurz XML, ist eine vom World Wide
Web Consortium (W3C) [13] definierte Metasprache zum plattform- und
implementationsunabhängigen Austausch von strukturierten und menschen-
lesbaren Daten.

Das OSM-XML-Format

Jeder OSM-XML-Datensatz beginnt mit einem -Element, gefolgt von
einem -Element, das den geographischen Bereich der Daten angibt.
Darunter folgen in der Reihenfolge die Objekttypen Nodes, Ways und Re-
lations:
    
                                                                              13
3.1   Extrahierung der Daten - ÖPNV-Writer                                   Ramdane Sennoun

    ...
   
       ...
   
    ...
   
   < r e l a t i o n i d=” 58428 ” . . . >
       ...
      
       ...
      
       ...
      
    ...
 
Das OSM-XML-Format (Endung .osm) verbraucht mit seiner Größe viel
Speicherplatz (Vergleich Tabelle 3.1) und sollte für Anwendungen nicht auf
mobilen Geräten gespeichert werden. Jedoch eignet es sich in dieser Arbeit
zur Erfassung der Informationsstrukturanforderung und zur Datenvorverar-
beitung, da die Daten in menschenlesbarer Form vorhanden sind und sich
somit die relevanten ÖPNV-Daten aus OpenStreetMap erkennen lassen. Im
Anhang 6.2.1 ist der Vergleich des Speicherplatzverbrauchs einzelner For-
mate weiterer Städte tabellarisch und grafisch dargestellt.

14
3.1   Extrahierung der Daten - ÖPNV-Writer               Ramdane Sennoun

                     OSM-Format          Speichergröße
                      berlin.osm.pbf         20 MB
                        berlin.osm          366 MB
                        berlin.map           12 MB
                     bremen.osm.pbf          5 MB
                       bremen.osm            96 MB
                       bremen.map            3 MB
                    hamburg.osm.pbf          18 MB
                      hamburg.osm           337 MB
                      hamburg.map            11 MB
                    new-york.osm.pbf         67 MB
                      new-york.osm          1.4 GB
                      new-york.map           43 MB

      Tabelle 3.1: Speicherverbrauch einiger OSM-Formate im Vergleich

3.1.1    Vorverarbeitung der ÖPNV-Daten aus OpenStreetMap
Es gibt verschiedene öffentliche Verkehrsarten. Sie unterscheiden sich in
Technik und Infrastruktur. Zuerst müssen alle ÖPNV-relevanten Daten der
Objekttypen Nodes (Repräsentation der Haltestellen) und Relations (Re-
präsentation der Verkehrslinien) erkannt und aufgelistet werden, um daraus
mögliche Informationsstrukturanforderungen zu beschreiben.
Dazu wurden im ersten Schritt alle ÖPNV bezogenen Tags heraus sortiert,
die in Tabelle 3.2 zusammengefasst sind. Die Attribute id, lon (Longitude)
und lat (Latitude) sind nicht in der Tabelle aufgeführt, aber zur eindeutigen
Kennzeichnung der Haltestellen und Routen sowie zur Positionierung (lon
und lat) auf der Karte notwendig. Das Attribut id muss sowohl bei den No-
des als auch bei den Relations vorhanden sein. lon und lat enthält nur der
OSM-Obejekttyp Node.

                                                                           15
3.1    Extrahierung der Daten - ÖPNV-Writer               Ramdane Sennoun

        Tag                Bedeutung               Relation          Node
                                                (Verkehrslinie)   (Haltestelle)
        route        Zur Kennzeichnung von
                        Bus-, Straßenbahn-
                                                      √
                       und U-Bahn-Linien,
                       Eisenbahnlinien und
                              Fährlinien
                                                      √
        from             Start einer Route
                                                      √
          to           Endhaltestelle einer
                                Route
                                                      √
      operator        Betreiber einer Route
                         z.B. BVG (Berlin)
      network                  Netzwerk
                                                      √
                      z.B. Verkehrsverbund
                       Berlin-Brandenburg
                                (VBB)
                                                      √
         ref          Name einer Linie z.B.
                          U2, M48, S1, M6
                                                      √
        color             Farbe einer Linie
                                                      √                √
        name          Name der Route oder
                              Haltestelle
                                                      √                √
   website/               Verweis auf mehr
   wikipedia                Informationen
                                                                       √
 public trans-           Kennzeichnung als
                                                                       √
 port/railway/         öffentliche Verkehrs-
                                                                       √
   station/                haltestelle bzw.
                                                                       √
   highway                      Station
                                                                       √
     addr                      Addresse
                                                                       √
      atm                    Geldautomat
                                                                       √
      line                Name einer Linie
                                                                       √
     note                   zusätliche Be-
                              schreibung
                                                                       √
        phone                   Telefon
                                                                       √
     surveillance              Fahrstuhl
                                                                       √
      wheelchair             Eignung für
                              Rollstühle

               Tabelle 3.2: ÖPNV-relevante Tags aus OpenStreetMap

16
3.1   Extrahierung der Daten - ÖPNV-Writer              Ramdane Sennoun

3.1.2    Das Osmosis-Plugin
Die Osmosis-Distributionen ist schon mit den gängigsten Plugins, wie z.B.
dem Lesen und Schreiben aus einer Datenbank oder Datei, ausgestattet und
bleibt im Programmcode größtenteils unverändert. Neue Funktionen werden
einfach ergänzt. Es wurde ein Osmosis-Plugin mit dem Namen mapsforge-
public-transport-writer entwickelt, welches die aus der Vorverarbeitung ge-
filterten Objekte und Attribute aus beliebigen OpenStreetMap-Datensätzen
extrahiert und in eine SQLite-Datenbank (Abschnitt 3.2) speichert. Im An-
hang 6.1.1 wird gezeigt, wie das Osmosis-Plugin zum Erstellen einer ÖPNV-
Datenbank ausgeführt wird.

Um diese gewünschte Funktion, also der Extrahierung der ÖPNV-Daten aus
OpenStreetMap, mit Hilfe von Osmosis bereit stellen zu können, muss ein
sogenannter Task als Plugin implementiert werden. Die Abbildung 3.1 stellt
die Verarbeitung der OSM-Daten durch Osmosis dar und wird im Folgenden
beschrieben. Es gibt drei Arten von Plugins: Source-, Sink - und SinkSource-

        Abbildung 3.1: Datenverarbeitung mittels Osmosis ([34] S.50)

Plugins. Das Einlesen von OSM-Daten aus PBF- oder XML-Dateien sowie
das Weiterleiten dieser Daten erfolgen durch Source-Plugins. Sink -Plugins
dienen dazu die Daten zu serialisieren und dann in einem Format wie XML
oder PBF zu speichern. SinkSource-Plugins übernehmen deren Weiterver-
arbeitung. Daten eines Osmosis-Tasks werden eingelesen, möglicher Weise
verändert und an den nächsten Task weitergegeben. Dies ermöglicht z.B.
das Filtern, Ändern, Löschen oder Vereinigen von Daten.

                                                                         17
3.2   Die ÖPNV-Datenbank                              Ramdane Sennoun

3.2     Die ÖPNV-Datenbank

Die Aufgabe der ÖPNV-Datenbank ist es, Haltestellen nach ihrem Namen,
nach einer Route und in einem bestimmten Umkreis einer geographischen
Lage zu finden. Außerdem sollen zusätzliche Informationen zu den einzel-
nen Haltestellen geliefert werden. Im Folgenden soll das Datenbankschema
vorgestellt werden, das aus der Vorverarbeitung der OSM-Daten im letzten
vorletzten Abschnitt hervorgeht.

3.2.1    Entwurf des Datenbanksystems

Nachdem die in OpenStreetMap gespeicherten ÖPNV-Daten (OSM-Objekt-
typen, Tags und Attribute) gesammelt wurden, konnten einige Gruppierun-
gen von Tags und Attributen vorgenommen werden. Zudem bildeten sich
aus den Objekttypen zwei wichtige Klassen (für das Plugin) bzw. Daten-
banktabellen (für das Datenbankschema) heraus: die Verkehrslinien und die
dazugehörigen Haltestellen.

GTFS - Stops und Routes
Hierzu sollen die GTFS-Objekte Stops (Abb. 3.2) und Routes (Abb. 3.3)
herangezogen und beschrieben werden, weil sie eine gute Grundstruktur zur
Informationsspeicherung bieten und sich daraus auch die Informationsstruk-
turanforderungen ableiten können.

               Abbildung 3.2: GTFS - Stops Spezifikation

18
3.2     Die ÖPNV-Datenbank                                      Ramdane Sennoun

Objektbeschreibung: Stops

       • Anzahl: 8000   1

       • Attribute

           – stop id (obligatorisch) ist die eindeutige Kennung einer Station
             bzw. Haltestelle, die zu mehreren Verkehrslinien gehören kann.

             Eignung bezüglich dieser Arbeit: Da im OpenStreetMap-Format
             jeder Objekttyp mit einer eindeutige ID versehen ist, eignet es
             sich, dieses Feld so zu übernehmen. Abgeleitet aus OpenStreetMap-
             Knoten ergibt sich folgende Informationsstruktur:
               ∗   Typ: unsigned Long
               ∗   Länge: 20
               ∗   Wertebereich: 0...18.446.744.073.709.551.615
               ∗   Anzahl Wiederholungen: 0
               ∗   Definiertheit: 100%
               ∗   Identifizierend: ja

           – stop code (optional) hat eine ähnliche Funktion wie stop id. Die-
             ses Feld identifiziert die Station für Passagiere.

             Eignung bezüglich dieser Arbeit: Da in OSM nur die id zur ein-
             deutigen Kennung gibt, könnte man dieses Feld mit der ID gleich-
             setzen. Da es jedoch für diese Arbeit keinen Nutzen stellt, wur-
             de das Feld freigelassen bzw. nicht mit in das Datenbankschema
             übernommen.

           – stop name (obligatorisch) enthält den Namen einer Station.

             Eignung bezüglich dieser Arbeit: Das Feld wird so übernommen
             und wird mit dem OSM-Tag name gefüllt. Einige Haltestellen
             enthalten in OSM auf Grund von Fehlern beim Tagging oder
             wegen fehlender Informationen einen leeren String, die aber ver-
             nachlässigt werden können.
               ∗   Typ: String
               ∗   Länge: 255 2
               ∗   Wertebereich: Menge aller Zeichenketten
               ∗   Anzahl Wiederholungen: 0
   1
     Schätzwert abgeleitet von Berlin als Referenzstadt mit gut ausgebautem ÖPNV-Netz
[14] und hoher Beförderungsleistung [4]
   2
     Anzahl der Zeichen

                                                                                    19
3.2       Die ÖPNV-Datenbank                                       Ramdane Sennoun

                   ∗ Definiertheit: 100%
                   ∗ Identifizierend: nein

              – stop desc (optional) enthält eine Beschreibung über die Stati-
                on. Es sollten möglichst nützliche und qualitative Informationen
                bereitgestellt werden und nicht einfach der Name kopiert werden.

                 Eignung bezüglich dieser Arbeit: Dieses Feld wird je nach Verfügung
                 durch mehrere OSM-Tags gefüllt: addr, atm, phone, note, surveil-
                 lance und wheelchair.
                   ∗   Typ: String
                   ∗   Länge: 255
                   ∗   Wertebereich: Menge aller Zeichenketten
                   ∗   Anzahl Wiederholungen: 0
                   ∗   Definiertheit: 90%
                   ∗   Identifizierend: nein

              – stop lat (obligatorisch) enthält die geographische Breite der Sta-
                tion bzw. Haltestelle, die aus dem OSM-Attribute lat vom Node
                entnommen wird.
                   ∗ Typ: Dezimalgrad (double)
                   ∗ Länge: (3,15)3
                   ∗ Wertebereich: -90...0...90 (von 0◦ (am Äquator) bis ±90◦ (an
                     den Polen)
                   ∗ Anzahl Wiederholungen: 0
                   ∗ Definiertheit: 100%
                   ∗ Identifizierend: nein

              – stop lon (obligatorisch) enthält die geographische Länge, die aus
                dem OSM-Attribute lon ausgelesen wird und weist größtenteils
                die selbe Struktur wie stop lat auf. Der Wertebereich unterschei-
                det sich.
                   ∗ Wertebereich: -180.00...0...180.00 (ausgehend vom Nullmeri-
                     dian (0◦ ) bis 180◦ in östlicher und 180◦ in westlicher Rich-
                     tung)
                 Eignung von stop lon und stop lat bezüglich dieser Arbeit: Diese
                 Felder dienen der genauen Positionierung und sind für das System
                 notwendig.

     3
         bis zu dreistellige Dezimalzahl mit maximal 15 Nachkommastellen

20
3.2   Die ÖPNV-Datenbank                                       Ramdane Sennoun

         – stop url (optional) enthält eine URL einer Webseite über eine
           bestimmte Station.
            Eignung bezüglich dieser Arbeit: Da das fertige System keine
            Abfahrts- und Ankunftszeiten beinhaltet und primär offline ab-
            rufbar ist, sollte bei bestehender Internetverbindung auch eine
            Webseite bereitgestellt werden, bei der mehrere Informationen
            z.B. zu Abfahrtszeiten abgefragt werden können.
              ∗ Typ: String
              ∗ Länge: 255
              ∗ Wertebereich: Menge aller Zeichenketten
              ∗ Anzahl Wiederholungen: Es können mehrere Internetadres-
                sen (Google-Suche, Wikipedia-Artikel,. . . ) vorhanden sein.
              ∗ Definiertheit: 100%     4

              ∗ Identifizierend: nein
            Die folgenden Attribute werden der Vollständigkeit halber be-
            schrieben, sind aber bis auf wheelchair wegen fehlender OSM-
            Repräsentation für diese Arbeit nicht von Bedeutung.

         – zone id (optional) definiert die Tarifzone, die in OpenStreet-
           Map nicht erfasst und somit in diesem Datenbankschema igno-
           riert wird.
         – location type (optional) identifiziert ob diese stop id eine Sta-
           tion mit mehreren Haltestelle (Wert 1) oder mit einer einzel-
           nen Einsteige- und Aussteigemöglichkeit (Wert 0 oder leer) re-
           präsentiert.
         – parent station (optional) ist die stop id der vorher angefahren
           Station (Vorr. location type=1 ) der jeweiligen Route.
         – stop timezone (optional) gibt an, in welcher Zeitzone sich die
           Station befindet.
         – wheelchair boarding (optional) war zum Zeitpunkt der Vorver-
           arbeitung und Implementierung noch nicht mit in der Spezifikati-
           on integriert. Dieses Feld enthält die Information, ob eine Station
           behindertengerecht genutzt werden kann. In OpenStreetMap gibt
           es dafür das Tag wheelchair, das jedoch mit in die Haltestellen-
           beschreibung übernommen wurde.

   4
     Bei fehlendem Tag soll automatisch ein Suchmaschinen-Link mit stop name generiert
werden.

                                                                                   21
3.2    Die ÖPNV-Datenbank                                  Ramdane Sennoun

Objektbeschreibung: Routes

                    Abbildung 3.3: GTFS - Routes Spezifikation

      • Anzahl: 500   5

      • Attribute

          – route id (obligatorisch) ist die eindeutige Kennung einer Ver-
            kehrslinie.

              ∗   Typ: unsigned Long
              ∗   Länge: 20
              ∗   Wertebereich: 0...18.446.744.073.709.551.615
              ∗   Anzahl Wiederholungen: 0
              ∗   Definiertheit: 100%
              ∗   Identifizierend: ja
            Eignung bezüglich dieser Arbeit: Dieses Feld wird vom OSM-
            Attribute id gefüllt. Es nimmt folgende Struktur an:

          – agency id (optional) ist die ID des Betreibers, der den GTFS-
            Feed erstellt und wird von der agency.txt-Datei referenziert.

            Eignung bezüglich dieser Arbeit: Dieses Feld ist für diese Arbeit
            irrelevant.

          – route short name (obligatorisch) enthält die Benennung der
            Route in Kurzform (z.B. für Berlin: U2 (U-Bahn), M48 (Bus),
            M6 (Straßenbahn) oder S1 (S-Bahn)

   5
     Schätzwert abgeleitet von Berlin als Referenzstadt [14], enthält Hin- und
Rückfahrtlinien

22
3.2   Die ÖPNV-Datenbank                                 Ramdane Sennoun

        – route long name (obligatorisch) enthält den ganzen Namen ei-
          ner Route und bekommt meistens den Namen der Endhaltestelle
          zugewiesen.

          Eignung von route short name und route long name bezüglich
          dieser Arbeit: Beide Felder werden auch in OpenStreetMap er-
          fasst und werden von den Tags ref (für route shortname) und to
          (für route long name) repräsentiert. Fehlt das Tag to, so ist das
          Tag name repräsentativ.
            ∗   Typ: String
            ∗   Länge: 255
            ∗   Wertebereich: Menge aller Zeichenketten
            ∗   Anzahl Wiederholungen: 0
            ∗   Definiertheit: 100%
            ∗   Identifizierend: ja

        – route desc (optional) beschreibt die Route detaillierter.

          Eignung bezüglich dieser Arbeit: Für dieses System setzt sich
          dieses Feld aus den OSM-Tags from, to und note zusammen.
            ∗   Typ: String
            ∗   Länge: 255
            ∗   Wertebereich: Menge der Zeichenkette
            ∗   Anzahl Wiederholungen: 0
            ∗   Definiertheit: 90%
            ∗   Identifizierend: nein

        – route type (obligatorisch) beschreibt, mit welcher Art von Ver-
          kehrsmittel diese Route gefahren wird.
          Eignung bezüglich dieser Arbeit: Dieses Feld ist wichtig zur Un-
          terscheidung der Verkehrsmittel und wird durch das Tag route
          beschrieben. Folgende Verkehrsmittel müssen aus OSM extrahiert
          und einheitlich dargestellt werden.
            ∗   U-Bahn (U2, U6, . . . )
            ∗   S-Bahn (S55, S2, . . . )
            ∗   Bus (M48, M85, N6, . . . )
            ∗   Tram (M1, M2, M17, . . . )
            ∗   Ferry (F10, F11, F12, . . . )
            ∗   Haupt- und Nebenbahnen
                  · Schnellzüge (ICE, IC, . . . )

                                                                          23
3.2   Die ÖPNV-Datenbank                              Ramdane Sennoun

                · Regionalbahn (Deutsche Bahn)
            ∗ Standseilbahn
            ∗ Gondelbahn
            ∗ Kabelstraßenbahn (z.B. in San Francisco)
          Je nach Verkehrsmittel, wird in der Darstellung ein anderes Logo
          verwendet.
            ∗ Typ: Byte
            ∗ Länge: 1
            ∗ Wertebereich: 0...8

                 Wert       Verkehrsmittel               Tag/Wert
                  0              S-Bahn                    light rail
                  1              U-Bahn                     subway
                  2      Haupt- und Nebenbahnen      rail, railway, train
                  3                Bus                         bus
                  4               Fähre                      ferry
                  5         Kabelstraßenbahn        aerialway=cable car
                  6            Gondelbahn            aerialway=gondola
                  7           Standseilbahn          railway=funicular
                  8            Straßenbahn                    tram

            ∗ Anzahl Wiederholungen: 0
            ∗ Definiertheit: 100
            ∗ Identifizierend: nein

        – route url (optional) enthält eine URL einer Webseite über eine
          Route.

          Eignung bezüglich dieser Arbeit: Die Webseite soll dazu dienen,
          dem Nutzer mehr Informationen aus dem Internet zu liefern, um
          eventuell aktuelle Meldungen zum Betrieb zu bekommen. Die
          gängigen OSM-Tags für dieses Feld sind website und wikipedia.
            ∗   Typ: String
            ∗   Länge: 255
            ∗   Wertebereich: Menge aller Zeichenketten
            ∗   Anzahl Wiederholungen: mehrere Internetadressen möglich
            ∗   Definiertheit: 100
            ∗   Identifizierend: nein

        – route color (optional) definiert die Darstellungsfarbe der Ver-
          kehrslinie auf einer Karte als sechsstellige Hexadezimalzahl.

24
3.2   Die ÖPNV-Datenbank                                Ramdane Sennoun

        – route text color (optional) gibt die Textfarbe einer Route an,
          die zu route color im Kontrast stehen sollte.

          Eignung von route color und route text color bezüglich dieser Ar-
          beit: Da die Darstellungsweise über das Rendertheme (Abschnitt
          3.6) vordefiniert wird, werden diese Felder nicht betrachtet.

Auf Grundlage der Vorverarbeitung und Beschreibung der Informationss-
trukturanforderungen wurde ein vorläufiges, konzeptuelles Entity-Relation-
Modell erstellt, um die ersten existierenden Konzepte der zu modellieren-
den Welt und die Beziehungen zu einander veranschaulichen zu können. In

 Abbildung 3.4: Vorläufiges, konzeptuelles Schema der ÖPNV-Datenbank

dem in Abbildung 3.4 gezeigten ER-Schema gibt es zwei Gegenstandstypen
(Entity) und ein Beziehungstyp (Relation). Den Gegenstandstypen Stops
und Routes sind jeweils ein identifizierendes Schlüsselattribut und weitere
beschreibende Attribute zugeordnet. Die Schlüssel sind im obigen Schema
durch Unterstreichung gekennzeichnet.

3.2.2   Das Datenbankschema
In diesem Abschnitt soll das bereits erstellte konzeptuelle Schema verfei-
nert und erweitert werden. Zudem werden im Folgenden die grundlegenden
Strukturierungskonzepte des Entity-Relationship Modells als Relationen des
relationalen Datenmodells beschrieben. Wurden das Schema verfeinert und
die Indexstrukturen festgelegt, so kann das endgültige Datenbankschema
und die dazu entwickelte Programmierschnittstelle vorgestellt werden.

                                                                         25
3.2   Die ÖPNV-Datenbank                                  Ramdane Sennoun

Das bisherige Schema besteht aus folgenden Relationen:

Stops : {[stop id : integer, stop name : string, stop desc : string, stop lat :
double, stop lon : double, stop url : string]}

Routes : {[route id : integer, route short name : string, route long name :
string, route desc : string, route type : integer, route url : string]}

gehörtZu : {[stop id : integer, route id : integer]}

Die Relation zur zugehörigen Beziehung gehörtZu hat den Schlüssel {stop id,
route id }, da Stationen i.A. zu mehreren Verkehrslinien gehören können und
umgekehrt Verkehrslinien aus mehreren Stationen bestehen. In diesem Fall
bildet die Menge aller Fremdschlüsselattribute den Schlüssel der Relation. In
Abbildung 3.5 soll dies an einer Beispielausprägung der Relation gehörtZu
illustriert werden. Es gibt zu einer stop id mehrere Einträge in der Relation

         Abbildung 3.5: Beispielausprägung der Relation gehörtZu

gehörtZu. Ebenfalls gibt es zu einer gegebenen route id mehrere Einträge.
Die Werte des Attributs stop id aus gehörtZu verweisen als Fremdschlüssel
auf Tupel der Relation Stops. Analog verweisen die Werte des Attributs rou-
te id aus gehörtZu auf Tupel der Relation Routes.

Auf dem bisher vorgestellten Datenbankschema könnte man Abfragen defi-
nieren, die das Suchen und Finden von öffentlichen Verkehrshaltestellen mit
bestimmten sachlichen und räumlichen Kriterien ermöglicht.

26
3.3    R-Baum und R*-Baum                                  Ramdane Sennoun

Beispiele:

      • sachlich: Welche oder wie viele Stationen gehören zur U-Bahn-Linie
        U2?

      • sachlich: Wo liegt die Bushaltestelle Zwieseler Straße?

      • räumlich: Es sei ein Ortspunkt S mit Breitengrad −90.0◦ ≤ lat ≤ 90.0◦
        und Längengrad −180.0◦ ≤ lon ≤ 180.0◦ gegeben. Welche nahegele-
        genen Stationen befinden sich in einem Umkreis von 500 Metern zu
        S?

Die Selektionsprädikate der räumlichen Anfrage beziehen sich also auf meh-
rere Attribute der Relation Stops. Um die k nächsten Nachbar-Elemente des
Punktes S aus der Stops-Tabelle zu ermitteln, müsste man n ≥ k Elemente
{n =|Stops|} auslesen. Dies scheint mit diesem Datenbankschema ungeeig-
net, da man beim Suchen von umliegenden Haltestellen im Umkreis von 200
Metern nicht mehr als 20 bzw. weniger Stationen erwarten würde.

Um diese Suche effizient zu gestalten wird eine mehrdimensionale (räumliche)
dynamische Indexstruktur verwendet. Die Dimensionen, dessen Intervalle
durch die geografische Lagen der Stationen bzw. Haltestellen angegeben
sind, werden intern über einen R*-Baum [33] indiziert. In einem Bench-
mark (Kapitel 4.2) wird der zeitliche Aufwand von Anfragen mit und ohne
R*-Baum-Implementierung verglichen.

3.3      R-Baum und R*-Baum
Der R-Baum als räumliche, hoch-balancierte Indexstruktur, vorgestellt von
Antonin Guttman im Jahre 1984 [35], erlaubt es, effiziente Bereichsanfra-
gen bzw. Anfragen nach den nächsten Nachbarn zu beantworten. Der R-
Baum ähnelt dem B-Baum und besitzt zwei Knotentypen: Blattknoten und
innere Knoten. Die Blattknoten des Baumes speichern die zu indizieren-
den räumlichen Daten, die mit Hilfe von minimal umgebenden Rechtecken
(MUR) (Englisch: minimal bounding rectangle, MBR, auch minimal boun-
ding box, MBB) umschlossen sind. Ein Blattknoten hat die Form (MUR,
tuple id), wobei tuple id das n-dimensionale Datenobjekt repräsentiert. Die
n-dimensional, minimal umgebenden Rechtecke umfassen die im Teilbaum
darunterliegenden räumlichen Daten.
Ein innerer Knoten ist ein Paar aus MUR und einem Verweis auf ein Kinds-
knoten (MUR, child) im R-Baum. Die Struktur eines R-Baums muss nach
Guttman folgende Eigenschaften aufweisen:

                                                                           27
3.3    R-Baum und R*-Baum                                   Ramdane Sennoun

                                                                      M
Es sei M die maximale Anzahl der Einträge pro Knoten und m ≤         2   die
minimale Anzahl von Einträgen in einem Knoten.

     1. Jeder Blattknoten enthält mindestens m und maximal M Indexein-
        träge, wenn der Blattknoten nicht die Wurzel ist.

     2. Für jeden Indexeintrag i eines Blattknotens ist MUR das kleinst-
        möglich spannbare Rechteck, das die indizierten Datenobjekte um-
        fasst.

     3. Ein innerer Knoten hat mindestens m und maximal M Kindsknoten,
        wenn es nicht der Wurzelknoten ist.

     4. Für jeden Eintrag der Form (MUR, child) eines inneren Knotens ist
        MUR das kleinst-möglich spannbare Rechteck, das die Rechtecke der
        Kindsknoten umfasst.

     5. Ist die Wurzel kein Blattknoten, so hat sie mindestens zwei Kinder
        (Nachfolgerknoten).

     6. Alle Blätter befinden sich auf einer gleichen Ebene.

Sei N die Anzahl der Indexeinträge, dann ist die maximale Höhe eines R-
Baums | logm N | −1. Guttman begründet dies damit, dass die Anzahl
der Kinder jedes Knotens (der sogenannte Branching factor) mindestens m
beträgt. Auf einen formellen Beweis wird hier verzichtet. Die Abbildung 3.6
zeigt eine Beispielstruktur eines R-Baums. Die dazugehörige Abbildung 3.7
soll zusätzlich die überlappenden Beziehungen der Rechtecke zu einander
illustrieren.

                Abbildung 3.6: Beispielstruktur eines R-Baums

28
3.3   R-Baum und R*-Baum                                 Ramdane Sennoun

Abbildung 3.7: Darstellung der überlappenden Rechtecke des R-Baums aus
Abbildung 3.6

Operationen

Im Folgenden soll auf die auf einem R-Baum abwendbaren Operationen
Suchen und Einfügen eingegangen werden. Des Weiteren werden einige Al-
gorithmen zur Knotenteilung vorgestellt. Danach wird formal eine Variation
des R-Baums vorgestellt, die sich im Einfüge- und Splitt-Algorithmus un-
terscheidet, dem R*-Baum. Das für diese Arbeit entwickelte System benutzt
eine benutzerdefinierte SQLite-Bibliothek, die es ermöglicht, räumliche In-
dexe anzulegen. Wie bereits Ende des letzten Abschnitts erwähnt, geschieht
dies über einen R*-Baum.

3.3.1   Suchen
Die Suche funktioniert ähnlich wie beim B-Baum und soll an einem Beispiel
demonstriert werden. Es wird nur der von Antonin Guttman vorgestellte
Suchalgorithmus beschrieben. Es gibt mehrere Suchalgorithmen wie z.B. der
Tiefensuche-Algorithmus von Kelley, Roussopoulos und Vincent [40].

 Es sei ein R-Baum mit einer Wurzel T gegeben. S sei das Rechteck, das alle
gesuchten Indexeinträge umfasst (Abbildung 3.8). Beginnend bei der Wurzel
T werden alle Einträge des aktuell besuchten Knotens rekursiv durchsucht,
wenn der jeweilige Eintrag sich mit S schneidet. Wird ein Blattknoten er-
reicht, so werden alle die in den Blättern enthaltenen Verweise als Ergebnis
zurückgegeben.

                                                                          29
3.3   R-Baum und R*-Baum                              Ramdane Sennoun

      Abbildung 3.8: Beispiel zur Operation Suchen auf einem R-Baum

                Abbildung 3.9: R-Baum Operation Suchen

In Abbildung 3.9 sind die bei der Suche untersuchten Einträge markiert.
S überschneidet sich mit den Wurzeleinträgen R1 und R2. Daher müssen
beide Pfade untersucht werden. In R1 gibt es die Rechtecke R3 und R4
und in R2 das Rechteck R6, die sich mit S decken. Es werden also nun die
Rechtecke R3, R4 sowie R6 auf passende Einträge überprüft und erreicht
somit die Blattknoten. In R3 gehört R10 zur Ergebnismenge. In R4 und R6
sind es R12 bzw. R16. R10, R12 und R16 sind das Ergebnis dieser Suche.

30
3.3    R-Baum und R*-Baum                                Ramdane Sennoun

3.3.2     Einfügen
Es sei I der neue Indexeintrag, der in den R-Baum eingefügt werden soll
und ChooseLeaf der Algorithmus, mit dem ein geeignetes Blatt B gefun-
den wird, in den I eingetragen werden soll. Hat B einen freien Platz für I,
also wenn M nicht überschritten wird, so wird I eingetragen. Im andern Fall
müssen die M+1 Einträge auf zwei Knoten gesplittet werden.
SplitNode sei der dafür angewandte Algorithmus und wird hinterher be-
schrieben. Wird bis zur Wurzel gesplittet, so entsteht eine neue Wurzel mit
den zwei neu entstandenen Knoten. Wurde I eingefügt, müssen die Vater-
knoten angepasst werden. Es sei AdjustTree die dafür angewandte Funk-
tion.

      • ChooseLeaf wählt das Blatt aus, das den neuen Eintrag I mit dem
        Rechteck M U RI bekommt: Sei N der Wurzelknoten. Ist N ein Blatt,
        so wird N zurückgegeben. Solange N kein Blatt ist, wird ein Kinds-
        knoten ausgewählt, dessen MUR die kleinste Veränderung braucht, um
        M U RI zu umfassen.

      • AdjustTree sorgt dafür, dass beginnend bei einem Blatt B aufstei-
        gend zur Wurzel die MUR angepasst und wenn nötig Knoten geteilt
        werden (SplitNode). Setze N = B und führe folgende Schritte aus,
        solange N keine Wurzel ist:

          – Es sei P der Vaterknoten von N und EN = (M U RN , NID ) der
            Eintrag in P, der auf N zeigt. M U RN muss so angepasst werden,
            so dass alle MUR in N möglichst eng umschlossen werden.
          – Wenn N einen aus einem früheren SplitNode resultierten Part-
            ner NN hat, dann sei EN N = (M U RN N , N NID ) der Eintrag in
            P, der auf NN zeigt. M U RN N muss dann so angepasst werden,
            so dass es alle MUR in NN eng umschließt.
               ∗ Wurde durch den Eintrag EN N M überschritten, so führe
                 SplitNode auf P aus, um die zwei Knoten P und PP zu
                 bekommen, die nun EN N und alle alten Einträge von P ent-
                 halten. Ist P die Wurzel, so erstelle eine Neue Wurzel mit
                 den Kindsknoten P und PP.
          – Wurden keine Veränderungen vorgenommen und kein SplitNode
            ausgeführt, so beende das Vorgehen. Andernfalls setze N = P
            und beginne von vorne.

                                                                         31
3.3    R-Baum und R*-Baum                              Ramdane Sennoun

Beispiel

In den etwas vereinfachten R-Baum vom vorherigen Beispiel soll das Recht-
eck R17 eingefügt werden (Abbildung 3.10). Abbildung 3.11 veranschau-
licht den Weg von ChooseLeaf . Der Algorithmus wählt in R1 das Rechteck
R3, weil R4 bei der Umschließung von R17 eine größere Erweiterung be-
deuten würde.

      Abbildung 3.10: Beispiel zur Operation Einfuegen in einen R-Baum

                      Abbildung 3.11: ChooseLeaf-Weg

Da der ausgewählte Blattknoten voll ist, muss der Knoten geteilt werden.
Abbildung 3.12 zeigt den neuen R-Baum. R8 und R9 sind im Rechteck R3,
R7 und R17 werden in ein neues Rechteck R3’ im Vaterknoten gelegt. Split-
Node versucht die neu entstandenen Rechtecke möglichst klein zu halten.

32
3.3   R-Baum und R*-Baum                                 Ramdane Sennoun

AdjustTree wird auf R3 angewandt.

                      Abbildung 3.12: Neuer R-Baum

Da der aktuelle Knoten genug Platz für R3’ hat, wird keine Teilung durch-
geführt und die Wurzel erreicht, womit die Operation endet. Das Ergebnis
ist in Abbildung 3.13 dargestellt.

                 Abbildung 3.13: Ergebnis der Operation

3.3.3   SplitNode - Teilung eines Knotens
Ein Knoten muss in zwei Knoten geteilt werden, wenn beim Einfügen eines
Eintrags E die maximale Anzahl von Einträgen M überschritten wird. In
Abbildung 3.14 wird eine schlechte und eine gute Teilung präsentiert. Auf
der linken Seite ist erkennbar, dass von den äußeren MUR unnötig viel Platz
eingenommen wird. Die MUR sollen möglichst klein gehalten werden (Gute
Teilung), so dass mit möglichst geringer Wahrscheinlichkeit beide Knoten

                                                                          33
Sie können auch lesen