Restriction=no_u_turn, from and to roles are the same way. Do these serve any purpose?

The wiki goes on to say:

If the absence of the traffic sign would not have been tagged, data users can only guess whether the situation in the field is compliant to the legal default or that this road segment has not yet been evaluated by a mapper.

It gives the example of maxspeed in the absence of a speed limit sign, but this caveat is even more relevant to U-turn restrictions. OSM-based routers generally go to great lengths to avoid issuing U-turn instructions at intersections, regardless of U-turn restrictions. In a typical scenario, the user has overshot a left turn they were supposed to make, so the router calculates a new route:

  1. In 500 feet, turn left.
    (wait a few moments)
  2. In 800 feet, turn right.
    (wait a few moments)
  3. In 500 feet, turn right.
    (wait a few moments)
  4. In 800 feet, turn right.
    (wait a few moments)
  5. In 500 feet, turn right.

It may take the user a while to cotton onto the fact that it’s effectively telling them to make an elaborate U-turn around the block. If it had just told the user about the U-turn upfront, it might’ve saved them a bit of time and frustration. Of course, a U-turn isn’t always allowed; instructing the user to make an illegal or impossible U-turn is also frustrating.

Unfortunately, the mainstream routers added support for turn restrictions back when coverage of U-turn restrictions was very poor, so even in a jurisdiction where U-turns are sometimes allowed, the router could not confidently tell you to U-turn without the running risk of telling you to do something illegal. Instead, routers were configured to take the easier conservative approach of almost never telling you to U-turn except at a dead end. This is actually the opposite of what many users need.

This limbo persists years later because of the patchwork of laws regarding U-turns. Indeed, some jurisdictions never allow U-turns anywhere, and local mappers fiercely defend the map against the scourge of U-turn restriction relations. Brazil is notorious among router developers as an example of this situation, but other countries and regions have similar laws and sentiments too.

There are some problems with the concept of not mapping local defaults related to turn restrictions. The wiki’s guidance on regional defaults only envisions traffic laws at the national level, not an aggressively decentralized system like in the U.S. Though U-turns at signalized intersections are generally legal in Ohio, the City of Columbus has completely outlawed them and posted educational signs to this effect in strategic locations around the city.

We can easily hand-wave and say that a router is responsible for allowing or disallowing U-turns based on local laws, but routers can’t honor these laws if they don’t know about them. Researching local laws on U-turns would require an inordinate amount of paralegal work. According to one legal publisher, there are 3,638 municipal ordinances related to U-turns in the United States alone, and they’re only one of several major publishers of municipal ordinances. At most, a data consumer might research the largest metropolitan cities, ignoring the rest, and maybe reserve that functionality for themselves in closed-source code. Meanwhile, the people who know their local laws are unable to do much about it.

Even if data consumers have access to a comprehensive database of local default rules about U-turns, it would be difficult to translate this database into correct routing behavior. Many jurisdictions, including Oregon, disallow U-turns unless otherwise posted (ORS 811.365). If data consumers are to assume the default of no U-turns, then how should one of these posted exceptions be mapped? There are only eight permission relations, all related to permission to turn right on red; no software understands these relations.

Approaching a left turn lane along a divided street, a sign in the median indicates that U-turns are allowed. (© 2017 justins83, CC BY-SA 4.0)

2 Likes