Relations/Proposed/Give way

From OpenStreetMap Wiki
Jump to: navigation, search
give_way
Status: Draft (under way)
Proposed by: AMDmi3
Tagging: type=give_way
Applies to: Relation
Definition: A better way to map give way
Drafted on: 2013-02-04

This relation is intended to mark give way relationship between road segments in a way similar to restrictions. It obsoletes highway=give_way.

Rationale

From Wikipedia: In road transport, a YIELD (Canada, Ireland, and the United States) or GIVE WAY (Hong Kong and most Commonwealth countries) traffic sign indicates that a vehicle driver must prepare to stop if necessary to let a driver on another approach proceed (but has no need to stop if his way is clear). A driver who stops has yielded or given his right of way to another.

Below, we use terms "minor road" and "major road" to indicate within a road crossing, correspondingly, an approaches drivers on which should give way, and the approaches drivers on which have the right of way.

Currently, highway=give_way tag is used to mark this feature as a point where the road sign resides. However, marking just a sign is insufficient (if not useless) as instead of just a sing, the relation itself should be mapped. It then may, for example, be used by navigation software to calculate times required to pass the crossing more precisely. When going over a major road, you're likely to not suffer a time penalty on a crossing at all, while when going over a minor road, you're likely to spend some time giving way to traffic on a major road.

highway=give_way does not allow to map the condition itself:

  • It doesn't specify direction in which give way applies. It may be mistakenly interpreted in a wrong direction.
  • The point is not linked to the intersection in any way. Depending on it's distance from intersection (and other intersections) it may be not interpreted as belonging to that intersection and may be mistakenly interpreted as belonging to the different intersection.
  • There's no way to specify which road segments it affects (see below).
  • It requires special and error-prone handling by software (e.g. checking way nodes for give_way tags)
  • It doesn't allow using existing code and tools which work with restriction relations

Thus, I propose to mark give way as a relation in a way similar to restrictions.

Tags

Key Value Explanation
type give_way / give_way:hgv / give_way:caravan / give_way:motorcar / give_way:bus / give_way:agricultural / give_way:bicycle / give_way:hazmat Give way applies to all vehicles or only to appropriate type of vehicles.
except psv / bicycle / hgv / motorcar The give way does not apply to these vehicle types (more than one: except=bicycle;psv)
day_on day of week for example, no give way in the morning peak on weekdays might be day_on=Monday;day_off=Friday;hour_on=07:30;hour_off=09:30
day_off day of week
hour_on time of day
hour_off time of day

Members

Way or Node Role Recurrence? Discussion
Way from one or more a way from which you whould give way. Isn't required to be split on an intersection.
Way to one or more a way to vehicles on which you whould give way. Isn't required to be split on an intersection.
Node
Way
via one (node) / one or more (way) the nodes or way between the end points across which you would travel
Node location_hint (or location_hint:give_way) one or more a hint to a renderer as to where might be a good place to position a symbol indicating the give way. E.g., in a N/S/E/W cross roads where you should give way from S to all other ways, you might put a node just SE of the junction and the renderer might place a no right turn sign there. Note that this member has the same meaning as an obsoleted highway=give_way node.
Node location_hint:main_road one or more a hint to a renderer as to where might be a good place to position a symbol indicating the main road (which is the opposite to give way).
Node road_sign zero or more a place where the road signs are installed.

Usage examples

Example 1

Give way1.png

In this intersection, there are two minor approaches (1, 2) and two major approaches (3, 4). You should give way moving from 1 and 2.

<relation id="1">
  <member type="way" role="from" id="1" />
  <member type="way" role="from" id="2" />
  <member type="way" role="to" id="3" />
  <member type="way" role="to" id="4" />
  <member type="node" role="via" id="1" /><!-- intersection node -->
  <tag k="type" v="give_way">
</relation>

If the roads have similar tags, they may be merged together - e.g. way 12 for both minor approaches, and way 34 for both major approaches. In this case, the relation gets simplified into

<relation id="1">
  <member type="way" role="from" id="12" />
  <member type="way" role="to" id="34" />
  <member type="node" role="via" id="1" /><!-- intersection node -->
  <tag k="type" v="give_way">
</relation>

Example 2

Give way2.png

Here's a roundabout, vehicles on which have right of way over the approaches.

<relation id="1">
  <member type="way" role="from" id="1" />
  <member type="way" role="to" id="5" />
  <member type="node" role="via" id="1" /><!-- intersection node for way 1 -->
  <tag k="type" v="give_way">
</relation>
<relation id="2">
  <member type="way" role="from" id="2" />
  <member type="way" role="to" id="5" />
  <member type="node" role="via" id="2" /><!-- intersection node for way 2 -->
  <tag k="type" v="give_way">
</relation>
<relation id="3">
  <member type="way" role="from" id="3" />
  <member type="way" role="to" id="5" />
  <member type="node" role="via" id="3" /><!-- intersection node for way 3 -->
  <tag k="type" v="give_way">
</relation>
<relation id="4">
  <member type="way" role="from" id="4" />
  <member type="way" role="to" id="5" />
  <member type="node" role="via" id="4" /><!-- intersection node for way 4 -->
  <tag k="type" v="give_way">
</relation>

The circle may be as well split into quarters in which case each relation will have both attached quarters of the circle as "to" members.

Stop signs

I also propose similar relation for stop signs (type=stop), obsoleting highway=stop correspondingly, for the same reasons. It'll be split into another proposal when enough feedback is collected for this one.