Access-Tags auswerten

Ich muss zur Zeit einen Algorithmus programmieren, der einige Access-Tags auswertet. Dabei bin ich heute morgen über Way 282945383 gestolpert, der hat unter anderem die folgenden Tags:

access:conditional = delivery @ (Mo-Sa 10:00-18:00)
bicycle = dismount
highway = pedestrian
motor_vehicle = no

Laut Mapiliary ist das eine Fußgängerzone mit Zusatzschild “Ladegeschäfte Mo-Sa 10-18h erlaubt” und es sieht ja alles so aus, als wäre genau das gemappt worden. Ich denke aber, es ist trotzdem verkehrt. Hier meine Gedanken:

In einer Fußgängerzone gilt:

access=no (weltweiter Default)
foot=yes (deutscher Default)
horse=no (deutscher Default)
bicycle=dismount (deutscher Default)
(weitere Defaults, sind hier irrelevant)

D.h in Fußgängerzonen darf man zu Fuß und schiebend mit dem Rad, sonst nicht.

Zum Weg 282945383:

a) “bicycle=dismount” ist überflüssig, weil Default

b) “motor_vehicle=no” heißt, dass Verkehrsteilnehmer mit Motor nicht dürfen (insbesondere verbietet dies E-Roller, die im Default nicht erfasst sind). Bleiben also Verkehrsteilnehmer ohne Motor:

c) Fußgänger, Radfahrer und Reiter haben explizite Defaults; diese werden
dort angewendet, d.h. Fußgänger und schiebende Radfahrer dürfen, Reiter und fahrende Radfahrer dürfen nicht.

d) Für andere Verkehrsteilnehmer ohne Motor existiert kein default, weshalb hier “access” greift; dieser ist durch den weltweiten Default “access=no” festgesetzt. Eingeschränkt wird dies durch “access:conditional = delivery @ (Mo-Sa 10:00-18:00)”. Konkret heißt das, Montag bis Samstag von 10-18 Uhr darf man zusätzlich zu den bereits erlaubten “zu Fuß” und “Fahrrad schiebend”, die Straße betreten, wenn man anliefern will, und zwar mit Inline-Scates, Tretroller, Fuhrwerken und noch ein paar anderen.

e) Wenn man “DE:Key:access - OpenStreetMap Wiki” glaubt zählen zu den anderen auch noch zweispurige Fahrräder, weil die keine Fahrräder sind, und “Personenkraftwagen mit Anhänger”, weil die angeblich keinen Motor haben. (Auf der englischen Seite ist letzteres etwas besser beschrieben.)

Und wie tagt man das jetzt richtig? Mein Vorschlag wäre:

highway = pedestrian
vehicle = no
vehicle:conditional = delivery @ (Mo-Sa 10:00-18:00)
bicycle:conditional = delivery @ (Mo-Sa 10:00-18:00)

Letzteres, damit anliefernde Radfahrer nicht schieben müssen, das scheint mir das Zusatzschild zu implizieren. Unklar ist, ob auch ein “horse:conditional = delivery @ (Mo-Sa 10:00-18:00)” hinzugefügt werden müsste, da ich nicht weiß, ob sich das Zusatzschild nach deutschem Recht auch auf anliefernde Reiter bezieht.

Wie seht ihr das?

Unabhängig von der eigentlichen Thematik verwirren mich die Lieferzeiten, ich würde erwarten das Lieferverkehr nur außerhalb der typischen Landenöffnungszeiten erlaubt ist, wenn mit deutlich weniger Fußgängerverkehr zu rechnen ist. Also vor 10:00 oder nach 18:00, nicht von 10:00 bis 18:00?

Ist zumindest bei den Fußgängerzonen in meiner Nähe hier so (und in den Zeiten darf man auch ohne abzusteigen mit dem Fahrrad durch hier)

Getaggt ist das hier zur Zeit als

highway pedestrian
motor_vehicle:conditional delivery @ (Mo-Su 06:00-10:30,19:00-22:00)

Also Lieferverkehr nicht während der Nachtruhe, und nicht während der Haupteinkaufszeiten.

Wie es mit Lieferverkehr durch Lastenfahrräder aussieht bleibt offen …

m.E. nicht erforderlich, da bicycle ja auch vehicle ist

und wenn horse nicht explizit ausgeschildert ist würde ich das auch nicht explizit angeben. Gem. § 28 StVO unterliegt das Reiten den Regeln des Fahrverkehr, damit sollte vehicle=no und vehicle:conditional=delivery … ebenfalls ausreichend sein und das Reiten einschließen.

Wie ist es denn konkret ausgeschildert? Vielleicht ist in Deinem Fall das motor_vehicle falsch?

Ich glaube, es ist einfach nur die Darstellung unglücklich:

  • Rikschas bzw. mehrspurige Fahrräder sind einfach auch nur Fahrräder. Wenn Fahrräder nicht erlaubt sind, sind automatisch auch mehrspurige Fahrräder nicht erlaubt. Die Unterscheidung braucht es eher, wenn Fahrräder erlaubt sind, aber speziell mehrspurige Fahrzeuge einschließlich mehrspurige Fahrräder nicht erlaubt sein sollten.
  • Ähnlich bei trailer: dass sie keinen Motor haben bezieht sich auf den Anhänger, nicht auf das Zugfahrzeug (lustig wird es bei modernen Wohnwagenanhängern mit Rangierantrieb, aber ich glaube der zählt nicht wirklich)

Wie ist es denn konkret ausgeschildert?

Ich versuche da heute Abend vorbeizukommen, soweit ich mich erinnere sind da zwei Zusatzschilder, eines mit den angegebenen Lieferverkehr-Zeiten (ohne genaue Angabe des Verkehrsmittels), und eines mit “Fahrräder frei 20:00 - 9:00” …

Laut Wiki haben Angaben für speziellere Verkehrsmittel Vorrang vor Angaben für allgemeinere (Conditional restrictions - OpenStreetMap Wiki - 1. Punkt dort). Da das implizite “bicycle=dismount” vorhanden ist, müsste das angewendet werden und nicht das allgemeinere “vehicle:conditional=…”.

Beim Mappen würde ich das auch nicht angeben, wahrscheinlich, weil ich mir gar keine Gedanken zu Pferden machen würde. Laut Auflistung im Wiki sind Pferde aber kein “vehicle” und fallen deswegen auch nicht unter “vehicle=no”.

Das Problem ist: Wenn du ein Programm schreiben willst, dass die Tags auswertet, dann muss klar sein, was Sache ist. Das Programm muss ja auch mit ungewöhnlicheren Kombinationen klar kommen. In meinem Fall brauche ich Pferde nicht, aber bicycle und delivery sind wichtig. Das Programm muss hinterher wissen, ob man in der Fußgängerzone Radfahren darf oder nicht.

Das erscheint mir nicht logisch.
Bei explizit angegebenen Werten gehe ich mit. Auf implizite Werte sollte nur zurückgegriffen werden, wenn nichts explizit angegeben ist und bei impliziten Werten in der Tabelle sollte es kein spezielleres hat Vorrang vor allgemein geben.

Ein Auswerter sollte wissen, welche Verkehrsregeln in Deutschland gelten, solange nicht explizit etwas anderes angegeben ist. Wie Du das programmierst ist dann Deine Sache.

Vielleicht haben diejenigen, die die Vererbungsregel erstellt haben, dies bisher nicht beachtet.

in einer Fußgängerzone sind erstmal nur Fußgänger erlaubt also quasi
implizit für pedestrian (in D) ist also:

access = no
foot = designated

bicycle=dismount lässt sich aus foot ableiten weil in D schiebende Radfahrer als Fußgänger zählen. Das wäre erstmal überflüssig.

Aber wenn man explizit access verwendet musst man auch foot setzten. (mit access=no und foot=yes sind bicycle=dismout und horse=no überflüssig.

Nun wurde hier aber access:conditional verwendet!
Dann wäre wieder foot = designated zwingend notwendig weil sonst auch der Fußverkehr von der Bedingung betroffen wäre. Mit motor_vehicle=no sind KfZ ganttägig ausgeschlossen.

highway = pedestrian
vehicle = no
vehicle:conditional = delivery @ (Mo-Sa 10:00-18:00)
bicycle:conditional = delivery @ (Mo-Sa 10:00-18:00)

Fahrräder sind auch Fahrzeuge. Wenn da von Lieferverkehr die Rede dann hat man vermutlich an Kfz gedacht aber auch Lieferung per Pferd, Kutsche, E-Scooter wären denkbar. von daher wäre access genauer

highway = pedestrian
foot = designated
access = no
access:conditional = delivery @ (Mo-Sa 10:00-18:00)

und falls mit überflüssigem explizit bicycle=dismount muss auch das conditional extra aufgelistet

bicycle = dismount
bicycle:conditional = delivery @ (Mo-Sa 10:00-18:00)

Die Frage hier ist vor allem:

Was ist mit “Ladengeschäfte Mo-Sa 10-18 h erlaubt” gemeint?

Ich lese hier nichts von Lieferverker! Von daher würde ich es als “Zufahrt zu den Geschäften frei” interpretieren (dazu passt der Zeitraum auch zu üblichen Öffnungszeiten)
Ich würde es daher als access:conditional = destination @ (Mo-Sa 10:00-18:00) setzen.

Ich habe das aus OSM tags for routing/Access restrictions - OpenStreetMap Wiki abgeleitet. Dort wird es explizit aufgeführt. (Und ja, da steht foot=designated, das hatte ich falsch abgeschrieben, weil es für mich keinen Unterschied macht.)

Es wäre außerdem zu prüfen ob für die benachbarte Fußgängerzone nicht die gleiche Regel gilt:

Way History: ‪Königstraße‬ (‪131278341‬) | OpenStreetMap
highway=pedestrian
bicycle=yes ???
motor_vehicle:conditional=delivery @ (Mo-Sa 06:00-18:00)

Der Weg scheint noch zur Fußgängerzone dazuzugehören (Breite / Kfz im Luftbild)
Way History: 229553720 | OpenStreetMap
highway=footway ???
incline=down

Der schmale Weg hier ist vermutlich eher ein Fußweg oder Mehrzweckweg.
(von unten kein Schild in Mapillary erkennbar)

Way History: ‪Königstraße‬ (‪230444331‬) | OpenStreetMap
highway=pedestrian ???
access=yes
motor_vehicle=no

Das ist wohl auch eher als Interpretationshilfe gedacht und da sind häufige Verkehrsmittel eben aufgeführt und andere z.B. Ekf, Gespanne eben nicht.

Was heißt das genau? Wenn ich nur die folgenden beiden Einträge habe:

access:conditional = delivery @ (Mo-Sa 10:00-18:00)
highway = pedestrian

Habe ich dann für Fußgänger morgens um 7:00 Uhr einen expliziten Wert oder nicht? Und wie sieht es am Mittwoch um 12:00 Uhr aus?

Das bringt mir beim Programmieren aber nichts. Ein Algorithmus interpretiert nicht viel. Der muss exakt sein. :slightly_frowning_face:

Da steht jetzt für Mi 12:00 explizit für ALLE Verkehrsarten “nur Lieferverkehr”.
Um 7 Uhr greift das access:conditional nicht, da würde man defaults annehmen, wobei aber Graphhopper damit so seine Probleme hat und ggf, einfach access=no annimmt.
Von daher steht im en-Wiki bei Verwendung von conditional soll man die Defaults immer explizit setzen (was hier access=no und foot=designated bedeuten würde).

Was willst Du haben?
Sklavische Auswertung der Tags oder brauchbare Ergebnisse?

Willst Du brauchbare Ergebnisse, so sollte Dein Algorithmus fehlertolerant sein.

Edit: Zum Thema passende Diskussion vor ein paar Monaten: What does the combination highway=steps and access=yes mean?

Ich will verstehen, wir man das sinnvoll auswertet. Der im Wiki angegebene Algorithmus ist offensichtlich nicht sinnvoll, damit komme ich auf das, was ich oben geschrieben habe. Da ich selber relativ selten access-Tags mappe und wenn, dann meistens irgendwo abschreibe, wo es identisch ausgeschildert ist, ist mein Verständnis des Ganzen nicht so ausgereift, dass ich da einen Algorithmus angeben kann, der “brauchbare Ergebnisse” liefert.

Dafür müsste ich wissen, wie die Mehrheit der Leute tickt, die das mappen. Mein Eindruck ist bislang, dass es viele Mapper gibt, die das selber nicht so ganz verstehen und einfach irgendwas mappen, was halt richtig sein könnte; was halt wiederum daran liegt, dass es a) ziemlich kompliziert ist und b) im Wiki nicht sauber aufgeschrieben wurde, auch wenn sich da Leute schon viel Mühe gemacht haben.

Solange man die Conditionals nicht mit auswertet, ist es noch recht einfach - dafür habe ich schon einen brauchbaren Algorithmus, der halt hin und wieder etwas daneben liegt, aber das lässt sich zur Not verschmerzen. Ich würde trotzdem gerne die Conditionals mit auswerten, aber dafür muss ich halt wissen, wann die Vorrang haben und wann nicht. @Mammi71 hat da schon einen wertvollen Hinweis gegeben: Die Defaults kommen erst ins Spiel, wenn ich die ganze Access-Kette durchgegangen bin und immer noch keinen Wert habe. Das hatte ich anders verstanden, macht aber so viel mehr Sinn.

Von wo kommt das access=no? Das ist nicht sinnvoll as Annahme für eine Fussgängerzone, sondern vehicle=no plus ein vehicle:conditional etc.