Rethinking road access restrictions rendering


In my previous blog post on road rendering in OpenStreetMap based maps i focused on better and more consistent layering of road feature and depiction of additional physical characteristics of roads, in particular the ground unit with rendering, visualization of the number of lanes, differentiation of paved and unpaved roads as well as implicitly mapped sidewalks. I did not much look at the basic classification system for roads and other non-physical characteristics of roads depicted in the map.

Traditionally in OSM-Carto and derivative map styles roads rendering depicts roads primarily according to the road classes, that is the highway=* values assigned by mappers. This system of road classes is mostly a classification system based on primary mode of transport and intensity and purpose of road use.

In addition OSM-Carto traditionally depicts another non-physical aspect of roads – the access restrictions. Access restrictions are traditionally rendered in OSM-Carto in a very basic form – access=no and access=private are depicted with a broad and rounded gray dashing on top of the road line while access=destination is shown with a similarly styled dotting. For the narrow road classes (track, path, footway etc.) only access=no/access=private is depicted with a lighter/de-saturated line color.

Towards an intuitive interpretation of access restriction tags

This system is widely (and for a long time) considered a too simplistic interpretation of access restriction tagging, which is one of the strong points of OpenStreetMap since it allows for a very differentiated mapping of all kinds of access conditions a road might have. Picking just three very undifferentiated types of access restriction tagging to depict sends the wrong message to mappers wrongly incentivizing them to simplify a complex and differentiated reality to just these values already on the tagging level. And it is also of fairly little value for the map user because they really cannot tell much from this simplistic depiction regarding if a certain road can be factually used for a certain purpose in a lot of cases.

The starting point for my work on access restrictions rendering i am going to talk about here was that after introducing differentiation of paved and unpaved roads for all major road classes (see the previous road rendering post for that) readability of access restrictions rendering was kind of poor in some cases. This has led to considerations in OSM-Carto that it might be difficult to depict access restrictions rendering and paved/unpaved differentiation at the same time and considering the problems described in the previous paragraph it might be worth considering to simply drop the access restriction rendering in favor of the paved/unpaved differentiation. I reviewed the colors adjusting the gray tone used for the unpaved dashing individually for the different road backgrounds for a uniform contrast and readability and i think the results are fairly decent.

Access restrictions rendering on major road classes

Access restrictions rendering with adjusted colors of dashing for better readability (click to also show the unpaved version)

The main step towards an intuitive interpretation of access restriction tags in a map is in my eyes to focus on what restrictions actually apply to the main mode of transport of the road class in question. That requires interpreting a lot of different tags because of the way access restriction tagging in OpenStreetMap works.

Traditionally in OSM-Carto we try to have a relatively simple and easy to understand relationship between tagging and rendering results. We believe that this is essential for mappers to be able to use the map as a feedback instrument for mapping. If the mapper does not understand how their tagging results in a certain appearance in the map they cannot derive any hints from the map if they mapped things correctly or not. However for access restriction tagging a basic understanding of how the system of tags in OSM for that works is a fundamental prerequisite for correctly mapping things. The UI of editors can help with that of course. The map style however cannot. And once we as style designers accept that such basic understanding of access tagging on the side of the mapper is a prerequisite for us providing useful mapper feedback it quickly becomes clear that we can best support mappers and non-mapping users by interpreting the tagging in total for what it means regarding the primary transport mode of the road class in question.

The primary transport modes i assume as well as hierarchy fall-backs are as follows:

road class primary transport mode fallback access tags
main road classes motorcar motor_vehicle, vehicle, access
highway=track motorcar motor_vehicle, vehicle, access
highway=cycleway bicycle vehicle, access
highway=bridleway horse access
highway=path foot access
highway=footway foot access
highway=steps foot access

In terms of access values i interpret

  • destination, customers and delivery as light (previously destination)
  • no and private as no
  • yes, designated and permissive as yes – for highway=track also agricultural, forestry and agricultural;forestry
  • all other values are ignored

This logic is implemented in a Postgresql function you can find in roads.sql. Here is how this looks like in principle.

De facto access restriction rendering based on primary mode of transport

De facto access restriction rendering based on primary mode of transport

So far we have been treating access restriction as a simple binary yes/no or ternary yes/no/light classification regarding a single mode of transport considered the primary one. This is often insufficient to decently depict the practical reality of the road use and its restrictions and permissions. This is why i also looked into situations with something like access=no, but… – in other words: Roads that are closed to all forms of use with a single exception. The practically most relevant cases of this type for the normal road classes are access=no + bus=yes for bus only roads and access=no + bicycle=yes for cycling roads. These i tried to indicate by coloring the access restriction dashing in a pale version of the colors of the respective roads.

Access restrictions with exceptions

Access restrictions with exceptions

Implicit access restrictions

Experienced mappers among the readers will probably have noticed that so far i have left out two pretty common road classes in my discussion and illustrations. Those are highway=pedestrian and highway=living_street. In contrast to most of the other major or wide road classes (those drawn with a fill and casing as opposed to the narrow classes drawn with a single line and a bright halo) these are defined mostly by implicit access restrictions. highway=pedestrian is for roads that could be used with a car but that are not allowed to be used with a car and reserved for pedestrians. They essentially have the implied access tags access=no + foot=yes. The exact meaning of highway=living_street regarding use permissions is a bit more vague and varies from country to country – mostly it means pedestrians have precedence over vehicle traffic here while vehicles are still allowed, often with some restrictions.

There are other road classes with similar implicit access restrictions suggested and partly used by mappers in OSM, specifically highway=busway and highway=bus_guideway. The suggestion to add support for highway=busway to OSM-Carto and the difficulty to do so in a consistent way was one of the factors that inspired me to work on this topic here.

There are two possible ways to integrate rendering of such road classes with implicit access restrictions into a map style. The first is to render them like a normal road with the implied restrictions tagged. That would – for highway=pedestrian and with the above scheme for rendering access restrictions – mean like highway=residential with red-orange access dashing. The advantage is that this would be intuitively readable for the map user who knows about the system of access restrictions rendering without learning specifically about the highway=pedestrian road class. The main disadvantage would be that highway=pedestrian roads often form fairly dense networks in town or city centers and all of the red dashing would create quite a lot of noise on the map. And by displaying the implicit access restriction you essentially have no room left to show any explicit tagging of access restrictions and permissions. The other – and commonly used way of rendering – is to treat them as a distinct road class. This is the approach OSM-Carto takes and that i took for the alternative colors style so far. And i unified highway=pedestrian and highway=living_street to avoid having too many distinct road colors. This was not quite satisfying though because the practical meaning of the two is quite different.

The situation with highway=busway is yet another difficulty because those mappers who introduced this tag want it to be used for some – but not for all – bus exclusive roads. Hence the aim would need to be to distinguish between highway=busway and normal roads tagged access=no + bus=yes in a meaningful and intuitive way or to unify them in design. And to not be confusing the approach would need to match that for highway=pedestrian of course. As an additional quirk we have in OSM-Carto for a long time rendering of highway=bus_guideway in a railway like fashion – which might make some sense from an engineering perspective but makes very little sense from the practical map user perspective.

To demonstrate how all of these issues can be addressed together i went for a base design as shown in the following with a violet color for highway=busway/highway=bus_guideway (which works better in the ac-style than in OSM-Carto because of the violet color for transport related symbols) and the previous light gray for highway=pedestrian and highway=living_street. In contrast to OSM-Carto which does not render access restrictions on highway=pedestrian (likely because that would clash with the implicit restrictions of this road type) i do so – based on the paradigm that the access dashing represents the de facto restrictions for the primary mode of transport. This is not that common practically for highway=pedestrian but there are cases where this applies – for example for pedestrian roads in military complexes or non-public parks.

Road classes with implicit access restrictions

Road classes with implicit access restrictions

But there remains a serious question with roads with implicit access restrictions: How to depict exceptions from the restrictions like i do with the colored dashes for explicitly access restricted roads? We can’t use the colored dashing because we have made the choice to not use that for the implicit restrictions. Yet this implicit restriction with exception situation is a fairly common case – in particular for pedestrian roads where bicycles are allowed. The solution that i chose and that i think works quite well is to use a continuous colored center-line for additional permissions compared to the primary mode of transport. This also nicely allows for a general differentiation between highway=pedestrian and highway=living_street – by indicating highway=living_street to be like a pedestrian road with additional permission for vehicles. How this looks like can be seen here:

Additional permissions on road classes with implicit restrictions

Additional permissions on road classes with implicit restrictions

Two final points – first: If you followed my previous post on roads rendering you might notice that the use of a solid center-line signature kind of interferes with using the same context to visualize lanes. Yes, it does, but the two still work decently together with some limitations to readability and also this is a rare combination – lanes tags on highway=pedestrian and highway=living_street are really rare. And second: Yes, on busways the center-line rendering is fairly poor in contrast and can be hard to reliably read, especially in the unpaved version. Again – this is a very unlikely combination practically and i included it here mostly to demonstrate the design and tag interpretation concept in principle, not because it is such a practically relevant combination. The colored center-line rendering could equally be dropped on the busways.

And i am not even sure if at this time a distinct rendering of highway=busway is advisable because there is not a clear and well established semantic difference between that tag and normal roads with access=no + bus=yes independent of local culture specific conventions. I included it here mostly as a demonstrator to have another type of implicitly access restricted roads in the mix and show that this rendering concept allows for such extensions.

Practical examples

Here a few practical examples of this new rendering using real world data.

Access restrictions rendering example

Access restrictions rendering example

Access restrictions rendering example

Access restrictions rendering example

Access restrictions rendering example

Access restrictions rendering example

Note in particular how – with the colored center-lines and colored access restriction dashing – you can pretty well spot continuous routes for cycling in a network of predominantly pedestrian or otherwise access restricted roads for example.

What these examples also show in some places is that both the changes introduced here and the previous road rendering related changes in the ac-style interpret a lot of tags that are not that frequently interpreted by maps elsewhere. This makes the map fairly difficult to read in some situations because of errors and inconsistencies in the data. Even just the mapping of certain aspects being incomplete and patchy can add a lot of noise to the map and make it rather difficult to read. But ultimately that mainly means that maps providing visual feedback on these features to mappers are badly needed.


So what did i show here? I presented a new system of interpreting and displaying access restrictions and permissions on roads that is close to the tagging system of OpenStreetMap by following the main road classification system but applies a considerably higher level of tag interpretation on the access tags to generate a meaningful and intuitive rendering.

Of course this adds quite a lot of design elements to the map that a map user needs to get acquainted with. In particular the added use of color makes the map fairly colorful in some settings – even though the color semantics are consistent across the whole domain of roads making it quite intuitive overall. Still it stretches the limits of what you can reasonably claim to be a map that can be understood without a map key.

Overall i think this is a viable demonstration how access restrictions like they are mapped in OpenStreetMap can be depicted in a manner that follows a consistent inner logic in terms of the symbology and presents the restrictions and permissions of roads in a meaningful way to the map user, significantly increasing the practical usefulness of the map compared to OSM-Carto. And as i discussed above i think this also significantly helps mapper feedback compared to the selective depiction of access=no/private/destination known from OSM-Carto. While the mapper cannot directly see the tagging in the map display any more with the new system and need to understand how the system of access restriction tagging in OSM works up front to make sense of the rendering, i think this practically is more useful and more valuable.

Most of the complexity of the tag interpretation logic is in two Postgresql functions which are generic in nature and not specific to the visual design used. Technically the same could be implemented with a lookup table for the different tag combinations which some developers might consider more suitable depending on individual preferences and taste.


  1. Just a thought about the notion of a map being intuitively readable; from a personal account:

    Maps get looked at by people who know the site, and by people who do not know the site. The former are at an advantage, the latter may have been in the other group beforehand, so they may be helped by knowledge acquired from past experience. I guess, that most people learn reading maps this way, by combining their own knowledge of the site with the representation on paper or screen.

    Mappers quite often look at the map of known sites. As an extra advantage, they can study the code underneath; After all, they create and adjust it. I must admit, without the code, I would not have realized, what the bubbles in some of the streets in my vicinity were for.

    Maybe, I am just not bright enough, let us rule that out 🙂 What could make it so hard? First, the access restrictions apply to modes of transport that I do not use, the restriction does not exist from my limited point of view, I do not have the base to draw the conclusion. Colour coding restrictions might actually help in this regard.

    Second, restrictions may not be mapped everywhere that they appear on site. Representation and ground truth do not match, the conclusion does not come up because of the inconsistency. Not much can be done, except mapping restrictions more completely. Especially on service class roads, this will make for a long wait. I guess many of them, not just the driveways, implicitly are “access light”?

    • Yes, intuitive readability is a highly multi-faceted subject. I always find it very enlightening to talk to people not very familiar with OpenStreetMap about how they perceive OSM based maps. It is very important to avoid the mistake to only view things through one’s cultural filter though. People in other parts of the world often have a very different perspective.

      Good point about some types of minor service roads (like driveways) often having implicit access restrictions as well.

  2. A bit of pondering this and OSM-Carto issues makes me want to suggest, on the topic “Access restrictions with exceptions”: As highway=path is a multi-purpose chameleon, it might be more true to the mapping intent, to have it change colours for different exceptions:

    – no+foot=yes gives footway reddish, this is already shown in the picture, on to the right then:
    – no+bicycle=yes gives cycleway purplish
    – no+horse=yes gives bridleway greenish

    On a first come first served base, so foot trumps bicycle trumps horse 😉

    • This is already done in OSM-Carto to some extent – highway=path + bicycle=designated is rendered with cycleway styling while highway=path + horse=designated is rendered with bridleway styling. Interestingly this is also done when there is foot=designated as well – which is fairly weird.

      I modified that to be more consistent:

      Extending this also to access=no + x=yes is a possibility – however it can be argued that this is nonsensical tagging because highway=path is documented and widely considered to be a tag for multiple use or unspecified use paths and combining that with an explicit specification of a single use only is not a very productive tagging approach.

Leave a Reply

Required fields are marked *.

By submitting your comment you agree to the privacy policy and agree to the information you provide (except for the email address) to be published on this blog.