Achtergrond
Afgelopen maand heb ik een bug deels opgelost in OSRM (vrije software navigatiebibliotheek o.a. gebruikt op openstreetmap.org) gemeld door AllRoads:
Bicycle and oneway, routing wrong
OSRM paste de toegangsbeperking die bicycle=use_sidepath impliceert nog niet toe. Nu wel (deze fix is nog niet beschikbaar op openstreetmap.org).
De tagwaarde use_sidepath betekent dat er een aparte weg is ingetekend waar de fietser wel hoort te fietsen. Voor navigatiesoftware volstaat dat de weg met use_sidepath effectief verboden is voor de fiets. Dat er semantisch onderscheid valt te maken tussen bicycle=no en bicycle=use_sidepath is voor navigatie volgens mij niet relevant. Hooguit zou een geavanceerde navigatietool de instructies anders kunnen formuleren (maar de route blijft gelijk).
Deze fix zou een hoop routingissues moeten oplossen waar fietsers over (vaak gevaarlijke) rijbanen gerouteerd worden. Nu zal dat in de praktijk niet heel problematisch zijn omdat de lokale situatie de gebruiker al snel naar de parallelle ventweg of fietspad stuurt, maar het moet wel kloppen.
Helemaal opgelost is de bug daarmee niet, want er gebeurt in het voorbeeld van AllRoads iets interessants: de navigatiesoftware ziet dat de snelste route over een paar meter eenrichtingsverkeer gaat. En wat doe je als fietser als je de keuze hebt tussen afstappen en vijf meter met de fiets aan de hand lopen of tweehonderd meter omfietsen? Je stapt af (of als je een botte hork bent fiets je door) en vervolgt je weg na een paar meter lopen.
OSRM doet dit ook (maar vertelt het nog niet duidelijk in de routeomschrijving dat de fietser daar af stapt).
Waarom gaat het dan mis bij dat voorbeeld van AllRoads? Je mag toch niet lopen over dat stukje weg?
De tags:
bicycle use_sidepath
foot use_sidepath
highway secondary
mofa use_sidepath
moped use_sidepath
oneway yes
De tag use_sidepath wordt ook op foot, mofa, en moped toegepast. Dat botst op dit moment expliciet met de documentatie (zie ook access) en het oorspronkelijke voorstel, die deze tag voor bicycle reserveren.
De tagwaarde wordt echter ook toegepast op andere tags. Relatief vaak, en hoofdzakelijk in Nederland:
Het gaat hier mis omdat OSRM (en andere navigatiesoftware) niet weten dat foot=use_sidepath betekent dat voetgangers en afgstapte fietsers daar helemaal niet horen te komen. Zij hanteren een lijst van waarden die toegang verbieden, waaronder no en private, maar use_sidepath ontbreekt.
Waarom gaat dit mis?
Zonder documentatie en consensus over tags kan navigatiesoftware er geen rekening met houden. Wanneer het gaat om iets kritieks als access-tags, is documentatie erg belangrijk. We schieten daar nu in te kort. De documentatie zegt nu dat use_sidepath alleen voor bicycle een geldige waarde is.
Als iemand op termijn een navigatieprofiel voor mofa of moped wil maken, dan is het ook belangrijk dat use_sidepath voor die categorieën kloppend gedocumenteerd is.
Hoe lossen we dit op?
Ten eerste: stel vast wat use_sidepath betekent voor alle access-sleutels. Waarschijnlijk betekent dat simpelweg dat de defintie van bicycle=use_sidepath wordt overgenomen en geldig wordt verklaard voor alle toegangssleutels, met name foot, mofa, en moped.
Wanneer dat gedaan is, kan het probleem aangedragen worden bij de navigatiesoftware die mensen gebruiken. Ik wil zelf best wel een poging wagen het te zijner tijd op te lossen in OSRM voor voetgangers en (afgestapte) fietsers; de documentatie laat ik graag aan anderen over die meer in deze materie zitten.
Zaken waar ik geen antwoord op heb
Volgens mij kan hier binnen de NL-gemeenschap wel consensus worden bereikt over de bredere definitie van use_sidepath, maar ik vermoed (verbeter me als dit niet klopt) dat dit nooit op de tagging-mailinglist is afgestemd. Dit gebruik van use_sidepath buiten bicycle lijkt een clandestiene introductie van een nieuwe tag te zijn. Daar kan terughoudend op gereageerd worden. Een wijziging van de documentatie van access zal ongetwijfeld vragen oproepen. Heeft iemand een idee hoe hier mee omgegaan kan worden?