Turn Restrictions

From Navit's Wiki
Jump to: navigation, search

Turn restrictions are currently processed in the route graph in the following manner:

  • Ways which are part of turn restrictions are added to the graph as items of type type_street_turn_restriction_no or type_street_turn_restriction_only.
  • The via point (or the end points of the via way) gets the RP_TURN_RESTRICTION flag set.
  • After all ways have been added to the route graph, turn restrictions are processed further: For each segment which attaches to a point with the RP_TURN_RESTRICTION flag set, a copy of the point (without the flag) is created. The segment, as well as all other segments which are part of allowed turns, is cloned; the clone is marked as oneway (in the direction of the allowed turn) and attaches to the copy of the point. This means that we may have multiple points at the same coordinates—one more than we have segments for each turn restriction.
  • When calculating a route, segments are considered impassable if they begin or end at a point with the RP_TURN_RESTRICTION flag set. That way, the route will use one of the cloned subsets and only follow allowed turns.

As of August 2018, this seems to be fully implemented for turn restrictions where via is a node.