Fußgängerampeln als triplet gemappt

Ich sehe die Lösung darin, dass die Router die häufigsten Values vom key:traffic_signals, die auf das Routing nur wenig Einfluss haben, herausfiltern und ignorieren oder einen kleineren Penalty setzen.
https://taginfo.openstreetmap.org/keys/traffic_signals#values

Da könnte es auch nicht schaden, wenn bei einigen Values überprüft würde, ob die durch ein häufigeres ersetzt werden könnten.
Natürlich sollte auch bei jeder Ampel, die nicht ein konventionelles Signal (traffic_light) ist, unbedingt ein Value für den key vergeben wird, damit das dann auch klappt.

@flohoff: Ich lasse mich ja gerne überzeugen, und bei landuse=flowerbed ist dir das auch gelungen, auch wenn ich dort noch nicht die Zeit hatte, Konsequenzen zu ziehen. Aber hier bleibe ich bei meiner ursprünglichen Meinung: Was du haben möchtest, ist in meinen Augen klassisches Mappen für den Router. Denn eigentlich sollten wir doch mappen, was da ist. Entweder überall oder nirgends. Die Auto-Ampeln sind sowohl an den Kreuzungen, als auch an den Fußgängerquerungen vorhanden. Ich wüsste nicht, wie ich jemandem (ohne dabei von Routing zu sprechen) begreiflich machen soll, dass man die mal mappt und mal nicht.

Es mag sein, dass es vor einigen Jahren praktisch war, das so zu machen. Zu dem Zeitpunkt war Micromapping aber noch nicht angesagt und demnach auch unerwünscht, zu viele Details zu mappen. Da war dieser Vorschlag wahrscheinlich sinnvoll. Die Zeiten haben sich aber geändert. Meiner Meinung nach ist diese Art des Mappens nicht mehr zeitgemäß. Ich denke nach wie vor, das es das Sinnvollste ist, die Auto-Ampeln immer zu mappen (und zwar auf dem Graphen und nicht am Straßenrand, wo sie tatsächlich stehen, damit sie beim Routing einfach berücksichtigt werden können).

Was das Routing anbelangt, würde ich vorschlagen, hier die Routing-Software entsprechend anzupassen. Die Tripplets kann man meines Erachtens recht einfach algorithmisch erkennen: Wenn entlang eines Weges highway=traffic_lights, dann ein highway=crossing + crossing=traffic_lights und dann wieder ein highway=traffic_lights kommt, ist es ein Tripplet und kann ignoriert werden, außer, wenn irgendwo dazwischen eine Verzweigung des Routinggraphs vorkommt, dann ist es kein Tripplet sondern vermutlich eine Kreuzung, bei der an einer Seite die Fußgängerquerung fehlt.

Mit dieser Heuristik sollte man einen Großteil der Tripplets erkennen können. Der Rest dürfte fehlerhaft gemappt sein (z.B. nur eine Autoampel) oder es könnte sich auch um Spezialfälle handeln - da kann man dann nichts machen; mit etwas Unschärfe muss man bei der Nutzung von OSM-Daten immer rechnen.

Man kann natürlich überlegen, ob man noch weitere Informationen hinzunimmt, um speziellen Anwendung (hier dem Routing) entgegen zu kommen. Beispielsweise durch eine Relation, die alle Elemente einer ampelgesteuerten Kreuzung zusammenfasst oder durch zusätzliche Tags, oder wie auch immer. Das wird ja in anderen Bereichen auch so gemacht (z.B. footway=link fürs Fußgängerrouting oder die Mülleimer bei Haltestellen, wie im Parallel-Thread zu lesen).

1 Like

Eben. Bei Bahnübergängen erfassen wir die Ampelanlagen auch nicht. Und wenn es mal mehr als eine Ampel und Haltelinie für eine Fahrrichtung gibt (z.B. bei Straßeneinmündungen kurz vor der Kreuzung) tragen wir die Ampel auch nur einmal ein statt an jeder Haltelinie.

Wenn entlang eines Weges highway=traffic_lights, dann ein highway=crossing + crossing=traffic_lights und dann wieder ein highway=traffic_lights kommt, ist es ein Tripplet und kann ignoriert werden

wobei man m.E. bei highway=traffic_lights auf einem way angeben sollte, wenn es nur in eine Richtung gilt.

Deshalb gibt es ja das differenzierte mapping für pedestrian crossings und für wirkliche Kreuzungsampeln.

Da gabs mal Menschen die haben sich viele Gedanken gemacht dazu das eine reine “Fußgängerampel” erkennbar ist und bleibt.

Man muss dann nicht noch tausend sachen drumherum mappen die das kaputt macht.

Flo

1 Like

Kannst du bitte darstellen (ruhig in Pseudocode) wie das gehen soll. Interessiert mich - ich beschäftige mich ja 15 Jahre mit so themen und ich sage das geht nicht fehlerfrei - deshalb interessiert es mich wie du das machst.

Also vor allem wie die differenzierung von kleinen normalen Kreuzungen und großen Fußgängerampeln geht.

Ich verstehe auch nicht so richtig was das soll. Wir haben ein im Wiki dokumentiertes schema was das problem vor 10 Jahren durchdacht und gelöst hat, und jetzt wollen wie das kaputt machen, die komplexität erhöhen, das explizite tagging ersetzen durch heuristik.

Hast du da eine Begründung für?

Flo

Da betrifft die “Bettelschaltung” aber nicht die KFZ sondern die Grünphase der Fußgänger/Radfahrer - das ist mit “button_operated” ja bereits abgedeckt.

Flo

Wie kann man sie denn erkennen? Das ist ja genau das, was ich nicht kann. Siehe c) oben.

Klar, ich versuche es mal (vielleicht irre ich da ja auch):

count = 0
für Knoten in Weg:
    if count = 0 and highway=traffic_lights:
       penalty += 20
       count = 1
    if count = 1 and highway=crossing and crossing=traffic_lights:
       count = 2
    if count = 2 and highway=traffic_lights:
       penalty -= 20
       count = 0
    if verzweigung:
       count = 0

Steht im Wiki, dass man das so machen soll… Und für mich klingt es auch viel logischer. Das explizite Tagging ist in deiner Version übrigens auch nicht vorhanden. Ich kann es jedenfalls nicht erkennen - die separaten Fußgängerampeln und welche an Kreuzungen werden genau gleich behandelt.

Ne, tut so nicht. Sorry, das war aus dem hohlen Bauch heraus. Ich hab’ mir jetzt mal einen endlichen Automaten aufgemalt. Das ist das, was ich da im Kopf hatte: (Oder doch im Bauch? :smile:)

automat

In Pseudocode umgesetzt ist das dann:

c=0
for Knoten in Weg:
    if verzweigung: c=0
    else if c=1 and highway=crossing and crossing=traffic_lights: c=2
    else if highway=crossing and crossing=traffic_lights: c=3
    else if c=2 and highway=traffic_lights: p -= 20, c=0
    else if c=3 and highway=traffic_lights: c=0
    else if highway=traffic_lights: p += 20, c=1

Wichtig: Ein Knoten, der gleichzeitig Verzweigung und highway=traffic_lights ist, wird so gehandhabt, als wären es zwei: erst Verzweigung, dann highway=traffic_lights.

Je länger ich hier lese, umso mehr freunde ich mich mit dieser Aussage an:

Hier wird nun seit mehr als 14 Tagen darüber diskutiert, wie man’s am besten macht. Immer wieder ist von Penaltys die Rede. Zunehmend frage ich mich, wer denn festlegt, wie hoch der Penalty pro Ampel sein soll. Ja, natürlich: Der Router-Ersteller. Aber basierend worauf? Erfahrungswert? Pi mal Daumen? Am Ende ist es ein fiktiver Wert, der wahrscheinlich selten stimmt, weil einfach zu viele andere Parameter fehlen:

  • Wie lange dauert die tatsächliche Rot-/Grünphase?
  • Sind die Phasen zu jeder Tageszeit gleich?
  • Ist die Ampel nachts ausgeschaltet?
  • Gibt es Induktionsschleifen?
  • Am wichtigsten aber: Hat/Hätte die Ampel überhaupt Rot, wenn man dort ankommt?

Was ich damit sagen will: Lässt sich überhaupt seriös berechnen, ob und welche Ampel einen Einfluss auf die Fahrtdauer hat? Es gibt viele Faktoren, die schlicht fehlen. Für’s reine Routing sollte allein Straßenklasse und access eine Rolle spielen, wobei höherwertige Straßen bevorzugt werden (egal wie viele Ampeln da sind) und niedrigere erst auf der “letzten Meile” in Frage kommen. Alles andere ist mehr oder weniger Kaffeesatzleserei, weil Ampelschaltungen zumeist tages-, zeit- und verkehrsabhängig sind.

2 Likes

Weil eine Fußgängerampel als highway=crossing + crossing=traffic_lights gemapped wird - anders als eine KFZ Ampel die als highway=traffic_lights gemapped wird.

Siehe unterschied zwischen - Bei dem einen geht es um die Fußgänger/Radfahrer - bei dem anderen um die Autos.

https://wiki.openstreetmap.org/wiki/Key:crossing
https://wiki.openstreetmap.org/wiki/Tag:highway%3Dtraffic_signals

In deinem Pseudocode fehlt jegliches prozessieren von Geometrie - Wenn abzweigungen zwischen Haltelinie (position des highway=traffic_lights) und dem Fußgängerüberweg mit highway=crossing ist z.b.

Es steht im wiki das pedestrian crossing mit highway=crossing gemapped wird oder? Und ist das durch traffic lights gesichert gehört da ein crossing=traffic_lights dazu.

Thats it.

Flo

Das ist alles total unerheblich. Es geht darum die beiden Ampeltypen zu unterscheiden. Denn sie verhalten sich unterschiedlich.

Wir taggen ja auch nicht ALLE straßen mit highway=road. Es gibt unterschiede. Und müssen wir aus der realität in das Datenmodell retten. Wenn wir das nicht tun sind sie auch in zukunft in den Daten NIE unterscheidbar.

Und sobald wir das für kfz gedachte highway=traffic_lights entgegen dem Wiki auch für reine Fußgängerampeln verwenden vergessen wir das Faktum der reinen Fußgängerampel.

Und wie der Mathematisch gebildete Mensch weiss kann man an einen Punkt keine tangente machen. Sprich - Die information ist weg. Und wenn sie einmal weg ist kann man die wieder dran raten - aber eben nur raten.

Und die frage die sich mir langsam stellt - Woher kommt hier der zwang einiger weniger unbedingt noch drölfschrillionen zusätzlich highway=traffic_lights zu mappen? Da sind keine - Da ist eine Haltelinie - also highway=solid_stop_line vielleicht - aber definitiv keine Ampel.

Flo

1 Like

Also bei mir zeigen beide rot oder grün. :wink: Im Ernst: Aus Router-Sicht mag das stimmen, aber warum nimmt man bei Fußgängerampeln automatisch an, dass sie mehr oder weniger dauergrün für den Autoverkehr zeigen? Es gibt auch Fußgängerampeln, die regelmäßig schalten, z.B. Mapillary cookie policy use. Hier wäre es also weiterhin erlaubt drei Nodes zu nutzen, während es z.B. bei Mapillary cookie policy use nur einer sein darf.

Womit die folgende Aussage durchaus berechtigt ist:

1 Like

https://wiki.openstreetmap.org/wiki/Key:traffic_signals
Da weiter unten gäbe es eine Lösung des Problems:

traffic_signals=pedestrian_crossing - A traffic light that only turns red to let pedestrians cross

Wenn das an den äußeren Triplet-Ampeln steht, wär klar, um was es sich handelt. Respektable 13000 mal in der Datenbank, wird anscheinend von iD unterstützt.
https://taginfo.openstreetmap.org/tags/traffic_signals=pedestrian_crossing#overview

Das müsste unbedingt im Wiki für highway=traffic_signals und an den anderen Erwähnungen des “triplet-mapping” ergänzt werden.

3 Likes

Man braucht lediglich einen zusätzlichen Tag wie auch schon in

beschrieben, Also traffic_signals=pedestrian_crossing an die Ampel und schon sind sie zu unterscheiden. Übrigens sind diese Tags auch schon lange in Gebrauch.

Falsch, da sind definitiv Ampeln, oftmals an einem Mast, aber für jede Fahrtrichtung ist eine Ampel montiert. Aber auch oft mit 2 getrennten Ampelmasten.

hk

1 Like

Der punkt ist das wir das sogar erfassen ob eine Ampel zyklisch oder button operated ist - also auf dem pedestrian crossing. Also es gäbe die möglichkeit das anders zu machen. Aber mir fällt spontan keine reine Fußgängerampel ist die nicht eine anforderungsampel ist.

Aber wie gesagt. Es gibt das entsprechende tagging wenn dem nicht so ist.

Flo

Warum hast du den zwang da 3 mal einen Ampelnode zu machen obwohl es doch lediglich um ein pedestrian crossing geht?

Wenn das so ist aber nicht an der stelle an der wir den node setzen - also auf der Haltelinie. Deshalb tagge ich die dann um auf highway=solid_stop_line - was exakt das ist was an der stelle ist.

Flo

Die Diskussion dreht sich im Kreis …
:disappointed:

4 Likes

Nein, da hast du mich falsch verstanden. Wie kann man eine reine Fußgängerampel von einer Fußgängerampel, die Teil einer größeren Ampelanlage ist unterscheiden. Das geht meiner Meinung nach nicht. (Und einmal fehlen die Auto-Ampeln und einmal sind sie schon da.)

Dann sind es keine reinen Fußgängerampeln mehr.

Umtaggen finde ich jetzt nicht so gut. Eine aus meiner Sicht gute Lösung wurde bereits genannt: Einfach die Art der Ampel via traffic_signals=pedestrian_crossing angeben.

4 Likes