[halLEipzig] Rants on route/line terminology and artificial differentiation between line/line_variant

Christian Müller cmue81 at gmx.de
Mo Okt 11 22:32:16 CEST 2010


  Hi,


ich habe mit Interesse die Fortschritte bei der Anpassung der Tags der 
OSM-ÖPNV-Daten Leipzigs verfolgt und auch selbst mit Hand angelegt.  
Allerdings sind mir beim Studium des Proposals von Oxomoa und den 
Diskussionsseiten dazu mehrere Unstimmigkeiten aufgefallen:

- die Differenzierung von route / line wirkt gekünstelt und ist auch 
nicht die Vereinheitlichung, die sich Oxomoa gewünscht haben dürfte, 
denn im Englischen wird line weit seltener im Sinne vom dt. "Linie" 
gebraucht, als man zunächst denken würde
- tatsächlich ist es so, dass Buslinien im Englischen als bus routes 
(bes. UK) bezeichnet werden

siehe dazu:  [1]


Die Argumente, die Oxomoa bringt, sind bei näherer Überlegung auch nicht 
sonderlich durchdacht.  Er möchte /route/ gern außschließlich als 
Sammlung physischer Wege begreifen, wohingegen eine Linie das 
Konglomerat aus Verkehrsmittel, Haltepositionen, Haltestellen und 
/route/ sein soll.

Warum ist diese Auftrennung unnötig, wenn nicht sogar konterintuitiv?  
Nun, die /route/ entsteht ja gerade durch die Linie - würden wir die 
/route/ erfassen, wenn es keine zugehörige Linie gäbe?  Ganz klar nein.  
Anders gesagt, die Sammlung physischer Wege, die eine bestimmte Linie 
befährt, kommt nur durch sie selbst bzw. eine ihrer Varianten zustande.

Wenn man sich einfach darauf einlässt, zu sagen, dass eine Route (im 
Sinne der Sammlung ihrer physischen Teilwege) zur Linie wird, indem 
beschrieben wird, welches Verkehrsmittel die Route bedient, sind wir 
tatsächlich wieder beim "common usage pattern", den wir vor Oxomoa 
hatten.  Tatsächlich ist es doch so, dass sich bis auf den Ersatz des 
Wortes "route" durch "line" in den Relationen wenig geändert hat - und 
während wir dachten, dass "line" besser ist, weil "line" besser klingt 
(es ist im dt. dem Wort "Linie" sehr ähnlich), ist es in der Tat so, 
dass die vorige Nutzung der termini keine erfassungstechnischen 
Nachteile hatte und außerdem sprachlich exakter am tatsächlichen 
englischen Gerbauch der termini dran war.  Für Übersetzungen gibt es 
immer noch Namensräume, da sollten tags nicht herhalten müssen.

Man könnte argumentieren, dass eine Trennung von Route (als Sammlung der 
Wege) und Linie sinnvoll wäre, für den Fall, dass mehrere Linien die 
gleiche Route bedienen.  Tatsächlich ist es so, dass wenn eine Linie in 
Hin- und Rückweg aufgespalten wird, wir fast immer mindestens zwei 
Linienvarianten pro Route haben.  Das ändert aber nichts daran, dass die 
Route erst aufgrund der Linie(nvarianten) besteht.

Da der Gebrauch des Wortes "line" gegenüber der bisherigen und 
gebräuchlichen Verwendung von "route" keinen Mehrwert bringt und 
zusätzlich dem engl. Sprachgebrauch entgegensteht, schlage ich vor, 
route zu verwenden.  Folgende Dinge sind einleuchtend und werden in der 
Praxis bisher auch so gehandhabt:

type=route   (Relation beschreibt eine Sammlung physischer Wege, ein 
Verkehrsmittel ist nicht angegeben - es ist also offen, wer diese Route 
benutzt und womit sie benutzt wird)

type=route   (und zusätzlich:)
route=bicycle/bus/train/tram    (die Relation beschreibt eine 
Fahrradroute, Buslinie, Zuglinie oder Tramlinie)

Eine Buslinienrelation, die nicht mehr betrieben wird, deren Route der 
Mapper aber aus bestimmten Gründen in der Datenbank aufheben will, 
könnte einfach mit "abandoned=yes" o.ä. getaggt werden.  Fakt ist:  eine 
/Linie/ ist immer an das vorhandensein ihrer Route (Sammlung Wege) 
gebunden.  Umgekehrt macht das Erfassen einer Route fast überhaupt 
keinen Sinn, wenn nicht auch eine Linie auf ihr betrieben wird (bzw. 
wenn sie nicht, wie im Fall von Radrouten, ausgeschildert ist).  Weshalb 
eine Route immer Teil der Linienrelation sein, und nicht extra als 
Routenrelation erfasst werden sollte, die man dann doch nur in die 
Linienrelation aufnimmt, folgt..




Nun, da die Begrifflichkeiten erörtert wurden, bleibt zur Diskussion der 
logische Aspekt des Datenmodells und zwar im Bezug auf die Modellierung 
von "Linienvariante" vs. "Linie".

siehe dazu:  [2]

Gerade im Hinblick auf die Trennung einer Linie in Hin- und Rückweg, 
entsteht der Wunsch die Route (Sammlung physischer Wege) der Linie nur 
einmal erfassen zu müssen.  Weiterhin wäre es möglich, dass auf einer 
Route mehrere Linien verkehren (das ist in der Praxis SELTEN der Fall - 
üblicherweise haben verschiedene Linien auch immer eine verschiedene 
Streckenführung!).

An dieser Stelle gilt es abzuwägen, ob sich die Redundanzvermeidung 
durch eine höhere Komplexität im Relationsbaum lohnt.  Beispiel:

Relation1:  type=route  und way members
Relation2:  type=route route=bus ref=5 from=Dest1 to=Dest2  members:  
Relation1/role=forward + Haltepos + Haltestellen
Relation3:  type=route route=bus ref=5 from=Dest2 to=Dest1  members:  
Relation1/role=backward + Haltepos + Haltestellen
Relation4:  type=route route=bus ref=5 name=Businie5 members:  Relation2 
Relation3

Relation2 und Relation3 wären was Oxomoa als Linienvariante beschreibt, 
Relation1 ist, was Oxomoa als Route beschreibt und Relation4 schließlich 
die Beschreibung der Linie (Aggregation der Varianten der Linie, 
Relation 2 und 3)..

Hier wurde Redundanz vermieden, denn die Sammlung physischer Wege 
existiert nur in Relation1, man erkauft sich das aber mit
- höherer Komplexität (sowohl Mensch als auch Maschine muss mehr Aufwand 
betreiben um sich "zusammenzusuchen", woraus die Linie, betrachtet man 
Rel2/Rel3/Rel4  eigentlich besteht
- Verlust an Dynamik (angenommen die Rück-linie Relation3 folgt zwecks 
Bauarbeiten einer anderen Route:  es wäre eine neue Routenrelation zu 
erstellen, diese Relation3 hinzuzufügen und Relation1 zu entfernen)

Wie man sieht, ist mehr Redundanz in diesem Fall besser, die Route 
(Sammlung physischer Wege) sollte hier Teil der Linie(nvariante) sein, 
um besser auf Änderungen reagieren zu können.  Dies ist auch momentan in 
Leipzig so umgesetzt:  Die Tramlinien z.B. erfassen die Route pro 
Richtung selbst, nicht in einer eigens dafür vorgesehenen Relation (vom 
Beispiel oben abgeleitet wäre das:  member aus Relation1 werden member 
von Relation2 und Relation3, Relation1 verschwindet).

Evtl. ist es beim Zug sinnvoll die Routenrelation extra zu erfassen, 
etwa wann tatsächlich /sehr viele/ verschiedene Linien die Route 
Leipzig-Berlin bedienen.  Selbst dann ist das bestehende tagging 
ausreichend und aussagekräftig.  Die Routenrelation bekäme type=route 
route=railway  und die Linienrelationen würden diese Routenrelation als 
member aufnehmen und (type=route route=train) nutzen.  Analog dazu 
könnte eine Tramroute  route=tramway und eine Busroute route=busway 
nutzen.  Weiterhin wird auch durch die Typen der member deutlich, ob es 
sich exklusiv um eine Routenrelation handelt (nur waymember), eine 
Linienrelation (nodemember in der role=stop vorhanden), bzw. eine 
Linienrelation, die ihre Route selbst verwaltet (waymember vorhanden, 
statt relationmember).




Beim Tagging von Linienvarianten hat sich Oxomoa ebenso die 
Redundanzvermeidung zum Ziel gesetzt, indem er wichtige Attribute der 
Linie in die Aggregation (Linienrelation) hochzieht und nur ein Minimum 
an tags (from=, to=, alternate=) für die Linienrelation empfiehlt, siehe 
[3].  Das hat die gleichen Probleme, die gerade erörtert wurden:  
Software und Mensch müssen mehrere Relationen browsen, um sich ein Bild 
einer Linie bzw. Linienvariante machen zu können.  Es vermeidet 
Redundanz, verliert aber wieder an Dynamik beim Auftreten von 
Änderungen.  Von daher ist es besser die Unterscheidung 
Linienvariante/Linie gänzlich aufzugeben, bzw. zu lockern (siehe [2]) 
und einfach so davon zu sprechen, wie wir das auch erfassen:

- Relation2:  Linie 5 Richtung Dest2
- Relation3:  Linie 5 Richtung Dest1
- Relation4:  Linie 5E Richtung Dest2E
- Relation5:  Linie 5E Richtung Dest1E

- Relation6:  Linie 5     mit Relation2/3/4/5 als member

Die Aggregation der Teillinien ist dabei optional, da jede Variante 
einer Linie auch für sich allein stehen kann (d.h. Relation2/3/4/5 haben 
das komplette Set an Tags (from,to, alternate, operator, network, ref, 
etc.).  Nur Schlüssel die nicht vorhanden sind, werden von einer 
/optional/ vorhandenen aggregierenden Relation (Relation6) geerbt (z.B. 
color= oder text_color=).

Weiterhin ist auch vorstellbar, dass auf diese Weise SEV modelliert 
werden kann:

-Relation17: Linie 5 von Dest1 nach B  type=route route=tram  (mit 
Haltepos/Haltestellen)
-Relation18: Linie 5 SEV von B nach C  type=route route=bus  (mit 
Haltepos/Haltestellen)
-Relation19: Linie 5 von C nach Dest2 type=route route=tram  (mit 
Haltepos/Haltestellen)

- Relation2:  Linie 5 Richtung Dest2  type=route route=tram mit member 
Relationen 17/18/19
- Relation3:  Linie 5 Richtung Dest1  type=route route=tram
- Relation4:  Linie 5E Richtung Dest2E  (tags von Relation6 geerbt, es 
wäre aber kein Fehler, sie anzugeben)
- Relation5:  Linie 5E Richtung Dest1E  type=route route=tram

- Relation6:  Linie 5  type=route route=tram    mit Relation2/3/4/5 als 
member




LG,
Christian (cmuelle8)


[1] 
http://wiki.openstreetmap.org/wiki/User_talk:Oxomoa/Public_transport_schema#line.3D_instead_of_route.3D.3F
[2] 
http://wiki.openstreetmap.org/wiki/User_talk:Oxomoa/%C3%96PNV-Schema#type.3D.3F


> Am 10.10.2010 00:20, Benjamin John:
>> Hallo,
>> es ist vollbracht: alle Tram-Linien in Leipzig sind
>> 1. im neuen Schema
>> 2. bis auf ein paar fehlende Haltestellen vollständig (siehe [1])
>> 3. an den aktuellen Netzplan 2010 angepaßt
>