Shoulder=* tag is confusing

It turns out that shoulder tag is used in a confusing way and makes hard to edit/use this data.

There is no clear way to mark something as full shoulder (enough to provide space for emergency parking) and something that is at most fitting or a walking pedestrian.

All of that is quite confusing, making hard to clarify situation for authors of editors as @westnordost discovered.

See for example

Shoulder quest is unclear · Issue #3613 · streetcomplete/StreetComplete · GitHub add shoulder overlay · Issue #4340 · streetcomplete/StreetComplete · GitHub Shoulder quest only on motorway and trunk in the Netherlands · Issue #4617 · streetcomplete/StreetComplete · GitHub

Posting this as I want to make people more aware that this is space that can benefit from some new tagging scheme.

As usually, it is too late to redefine shoulder tag - but maybe new ones can be added to make it possible to clearly tag and use this data?


Sigh, wikifiddlers gonna wikifiddle.

The definition of the shoulder tag was clear on the page:

Unless otherwise tagged, a shoulder so tagged should be assumed paved, wide enough to be used as an emergency refuge for cars, and wide enough for through passage by bicycles.

Unfortunately, the cumulative effect of wiki editors adding their own personal use-case to the top of the page has pushed this way down so that it’s not noticeable.

I suggest we just re-state this, and any shoulders that aren’t actually shoulders (but are soft verges or whatever) should be retagged accordingly.


note that at least part of that was based on survey of actual tagging: Shoulder quest is unclear · Issue #3613 · streetcomplete/StreetComplete · GitHub

Generally if we see something that’s mismapped we correct it?

And what if claimed definition on wiki mismatches actual use? Note how natural=tree was originally defined at wiki: Tag:natural=tree - OpenStreetMap Wiki

(it is possible that in this case Wiki should be rolled back)

I agree. I just stumbled on Key:verge - OpenStreetMap Wiki on the wiki. Just the tag we are looking for here, I think.

To summarise:

  • shoulder=* for hard shoulders, in some countries called ‘emergency lane’ or whatever. Point is that it is paved, i.e. an extension of the road, just not used as a ‘normal’ lane
  • verge=* for ‘soft’ shoulders, unpaved areas next to the road. These may for example allow passing on narrow roads.

How do you feel about this?


The problem may have arised due to different use of the term “shoulder” in common language. The difference between “shoulder” and “verge” appears to be diffuse.

Usually a narrow side strip along a highway covered with grass would be named a “verge”. In Australia I have seen roadsigns on such warning drivers to take care of “soft shoulders”, whereas according to the wiki a “soft shoulder” would be an unpaved side strip (usually covered with grass ) wide enough to park a motor car.

In many cases not easy to distinguish if the soft sidestrip would be wide enough to park a car or not. If you squeeze your car halfways into the scrub or half down the ditch it could fit … :upside_down_face:

The same applies to the width of hard shoulders. Paved sidestrips sometimes are not wide enough to park a car but still wide enough for a pedestrian to walk. According to the wiki this would not be a hard shoulder nor a sidewalk. How to tag?

Again there are cases hard to assign: A pic on the wikipage for verges shows a shoulder in my opinion, made up by a strip of asphalt + a strip of rough gravel with a total width of some 2 metres - wide enough to park a car anyhow. I would definetely tag this as a hard shoulder, followed by a verge (the grass to the side).

So it might be helpful to pin down clear definitions for the use of the “shoulder” tags, distinguishing between hard and soft shoulders and also define a tag for paved sidstrips not wide enough to park a car and therefore not a shoulder but also not a verge due to lack of vegetation.

Note that it may be a good idea to introduce hard_shoulder or similar if shoulder was widely and systematically tagged in various weird ways.

(though maybe the proper fix is to roll back wiki to old version and fix what is mismatching with original definition)

In many cases not easy to distinguish if the soft sidestrip would be wide enough to park a car or not. If you squeeze your car halfways into the scrub or half down the ditch it could fit … :upside_down_face:

it is easy, if you can make a “normal” car fit, it is a shoulder.

1 Like

Looking at the history of the wiki page for shoulder and the very short tagging mailing list discussion preceding it, it looks like wikifiddling hasn’t been the culprit in this case, but a poor definition from the start. At least in regards to “hard/paved shoulders”, it was never mentioned whether shoulder should exclusively be used for paved a.k.a. hard shoulders or also unpaved a.k.a soft shoulders.

Missing a clear distinction what counts as shoulder and what not, it is no wonder if usage subsequently somewhat broadened its maybe initially intended meaning (who knows what was intended, as it was never discussed or mentioned). Subsequent additions to the documentations seemed to rather try to document how the tag is used.

Wouldn’t it be too late now to change the definition in the wiki to only include paved shoulders? After all, this would retroactively declare any roads with non-paved shoulders that are tagged with shoulder=yes as wrong. Also, it wouldn’t solve the issue as long as there is no alternative way to tag soft shoulders, (hard) shoulders that are not quite broad enough to fit a car, shoulders that are one part paved and the rest just being gravel etc.
If there is no well documented way to tag these things, I predict such things will just ooze back into the ´shoulder` tag.

1 Like

No, not if it would be up to its axles in mud and would never get out again!

I don’t think that being explicitly paved is a prerequisite - the key is that it’s vaguely solid (so you can safely get your car on and off), long enough so that it’s not just a layby, and not obviously a grass verge. Historically, I’ve seen plenty of gravel shoulders in Ireland; though that might be less of a thing now.

There are two distinctions to be made for shoulders and verges:

  1. is it broad enough for a car to completely stop beside the traffic lanes?
  2. is it on the road surface, i.e. is it paved?

Both these properties should be relatively easy to verify (on-site), so if we started on a green field, the definition that would make most sense for a shoulder would be that it is paved and if not stated otherwise via shoulder:width broad enough to accomodate a car.
Anything unpaved, be it a soft shoulder, i.e. a verge specifically maintained to accomodate emergency stopping compeletely beside the road, or a muddy grass verge (without shrubbery on it) would be a verge without any default assumption about its width, the width can be specified via verge:width.

This then would cover

  • hard shoulders that are broad enough to accomodate a whole car: shoulder=yes:

  • hard shoulders that are not broad enough to accomodate a whole car: shoulder=yes + shoulder:width=1.5:

  • hard + soft shoulder: shoulder=yes + shoulder:width=0.5 + verge=yes + verge:width=1.5

  • soft shoulder only: verge=yes + verge:width=2 verge:surface=grass_paver: (this soft shoulder looks possibly muddy, but I think this is deceiving, if you look closely you see it’s actually paved with a grass paver)

Now, of course, we don’t start on a green field. So, what could be done?


that would not meet my definition of “make fit” :slight_smile:

shoulder=yes seems unnecessary if shoulder:width=* is specified. shoulder=yes may be confusing in case of small widths (The combination of shoulder=yes and shoulder:width=0.5 could be considered troll tagging).

Perhaps we should simply tag as follows:

  • Width known? Use shoulder:width=*.
  • Width unknown but broad enough for car? Use shoulder=yes.
  • Width unknown but not broad enough for car? Use shoulder=no.

Alternatively, in the known-width case, put the width directly in shoulder=* instead of in shoulder:width=*.

What kind of car defines the width of a shoulder? To me a shoulder is a somewhat paved (or at least somewhat prepared) area right next to the main lanes that is intended to be used by traffic in some way.
A verge on the other hand might be good enough to park a car but shouldn’t be used by moving traffic

There are plenty examples here (Germany) which are by far not wide enough to accommodate a full car, but fulfill an important function to ease the flow of traffic.

  • allow slow traffic to drive (partially) on them to ease overtaking by faster vehicles (that’s actually mandated by law to use them for this purpose)
  • basic separation for bicyclists from traffic
  • to park a broken down car partially on them, still partially on the main road but far enough to the side so that others can pass easily.

In my opinion the examples given by @westnordost are pointing in exactly the right direction to give as much useful information as possible.

@westnordost Example 3 does not in my view represent a shoulder of any kind, and I would see little value in explicitly mapping the width between the solid white line & the edge of the paved surface. Mapping this sort of thing should be discouraged as it just makes acquiring basic data on shoulders/verges much harder.

In some countries narrower shoulders may be provided on 2 lane roads to facilitate overtaking of slower vehicles, which would be expected to use the shoulder to provide a better visibility & road space.

BTW I’d prefer that we don’t embed images from Google here: there must be a decent choice of open source imagery. In practice I find it difficult to estimate the width in these images because of the very wide field of view of the camera. Here’s an example from Ireland on Mapillary


I can vouch for the right-hand shoulder being a car’s width because I parked along it a few times.


So how should a shoulder that is part paved and part unpaved be mapped otherwise?

Someone mentioned that even slim paved shoulders (+ the rest being soft shoulders) do have a utility over fully soft shoulders in that it

  • is a space for cyclists
  • cars can evade onto it to make it easier for overtaking vehicles to pass.
  • make it easier to form an emergency alley for police and ambulance

So, to distinguish definitely makes sense.


It seems we need a three-valued property then:

  • shoulder=no: The additional pavement is too small to serve any practical function for the flow of traffic.
  • shoulder=narrow: One cannot fit a car on the additional pavement, but it can serve minor traffic flow functions, such as providing space for cyclists and for cars partially moving out of the way for overtaking cars and emergency services that need to pass.
  • shoulder=yes: The additional pavement is wide enough to fit a car, so it can serve as a full emergency lane.
1 Like

That does not work if the shoulder per side differs (but could be solved by just using shoulder:<side>=*)

Also, since we are not on a green field, adding a new value would implicitly redefine what yes means. What would be necessary here is to also add a new value for full-width shoulders.
Incidentally, this would also be one possible right mechanism to get us out of the current “a bit of a mess” state. The other mechanism would be to use subtags, which might prove difficult since there are two tags in play: shoulder and verge.

An issue with narrow (and broad? full?) is, that it is somewhat difficult to determine this in edge cases without a measuring tape. But I reckon this cannot be avoided. It would have to be clearly defined from the start at which width exactly something can be considered a full width shoulder. (Maybe: =min width of a traffic lane?)