OpenStreetMap

About problems with [surface=unpaved; access=destination] roads

Posted by Mateusz Konieczny on 18 July 2015 in English. Last updated on 29 October 2018.

Render paved/unpaved

Rendering surface value should reduce prevalence of using highway=track for any unpaved road. Unfortunately currently this tagging for renderer is really popular.

ops

There are various styles typically used to depict important low quality roads:

  • (1) lack of fill, only the casing is displayed. But it works well on maps where most roads are OK, and only some are of low quality (typical for maps of Australia with unpaved roads across the outback). In areas where all or nearly all roads are unpaved results would be weird - roads render as thin double lines. Also, there would be problems with OSM data model, as rendering of crossings and places where way is split would be poor

  • (2) lack of casing or dashed casing - this style is currently used for tunnels. It would make necessary to find a new style for tunnels what is not easier. Also, people would be highly confused by using tunnel style with a new meaning.

  • (3) dashed fill (normal road colour & special colour) - it is a style that seems the most promising and examples below show how it may work. Roads under construction are currently using this style - it is also necessary to change it.

  • (4) new separate colours of fill/casing - changing only the casing is not really noticeable and/or is ugly, changing colour of fill doubles number of road classes that should be distinguishable. What worse, unpaved and paved of the same class should be similar what is quite hard to achieve. This differentiation is used really rarely, with Humanitarian style as the most prominent example.

  • (5) display in style similar to current highway=track - this style is not working well for important roads of a low quality (there are situations where [highway=primary; surface=unpaved] is used)

  • (6) dashed casing & fill (normal road style & empty space) - this style works better for roads under construction. highway=construction may start using such style

Styling of unpaved roads should:

  • introduce easily noticeable difference between paved and unpaved roads
  • do not introduce highly busy styling
  • make clear that unpaved road is worse than paved road
  • do not make unpaved road more noticeable than paved one
  • keep unpaved and paved road of the same class similar

on the left - current rendering, on the right possible new rendering

Imgur Imgur Imgur

But the situation is further complicated by fact that some roads are unpaved with set access=no/private/destination. Ideally it would be clear whatever given private road is also paved/unpaved. Unfortunately this part is not really successful.

unf

On the map above it is not immediately clear which road, if any is unpaved.

But in case of private roads it is more important that there is no access than surface value and unpaved roads with access=destination are quite rare so maybe this problem is outweighed by rendering surface value.

One thing that remains to be adjusted is how prominent dashes should be. Below are sets of images with various intensity of dashes. For each location there are four images

left: current rendering right: light dashes

left: light dashes right: moderate dashes

left: moderate dashes right: strong dashes

left: strong dashes right: really strong dashes

Unpaved primary road

http://imgur.com/c3rZJSS http://imgur.com/UY9bFuH http://imgur.com/DNh5lSX http://imgur.com/bb1DNyt

City with some unpaved roads

http://imgur.com/FSATH8B.png http://imgur.com/s13BOyW.png http://imgur.com/k36hH6n.png http://imgur.com/OBIkJg5.png

Unpaved service roads. Such roads are very often mapped using highway=track

http://imgur.com/MgrEwYm.png http://imgur.com/4HkPcEM.png http://imgur.com/Mqt7jiY.png http://imgur.com/jzFA62m.png

Paved and unpaved raceways.

http://imgur.com/zRhLBvc.png http://imgur.com/U85KLvw.png http://imgur.com/VqG9ogg.png http://imgur.com/1dK1HIw.png

City with curvy unpaved roads

http://imgur.com/vNRwchY.png http://imgur.com/MqCoHth.png http://imgur.com/6Qi2utb.png http://imgur.com/ghtFH80.png

Unpaved road with access=private

http://imgur.com/9dwnPep.png http://imgur.com/Rjawke2.png http://imgur.com/wLeY2Ym.png http://imgur.com/8bu9o5P.png

Unpaved road in the city

http://imgur.com/x5rV7CB.png http://imgur.com/jHs9rpa.png http://imgur.com/qoCHwLw.png http://imgur.com/AVech6Y.png

Unpaved road in suburbs

http://imgur.com/12lwI9b.png http://imgur.com/rksOG0e.png http://imgur.com/2VCLBcL.png http://imgur.com/OYtkxSx.png

Unpaved roads in a village

http://imgur.com/VNrAeN0.png http://imgur.com/tlC1I4J.png http://imgur.com/hzXjIkc.png http://imgur.com/RVMZq64.png

Unpaved road with access=destination

http://imgur.com/5iTG8cS.png http://imgur.com/AzO5A4G.png http://imgur.com/AYNXKnx.png http://imgur.com/QPuRM5V.png

Unpaved tertiary road

http://imgur.com/W7ftqMZ.png http://imgur.com/knm5PPW.png http://imgur.com/EukXVHK.png http://imgur.com/HMViVg8.png

Currently I am planning to use moderate dashes.

Differentiating highway=trunk and highway=motorway

I am working on two version of differentiating of these road types. First keeps all road types in white-yellow-red gradient, with an additional road class. Second is based on the German map style. Unfortunately, after days of tweaking I am still unhappy about results so I decided to avoid publishing preview.

highway=residential on z12?

flohoff proposed to keep highway=residential on z12

I love the z10 z11 residential road change. I’d like to keep them in z12 for the moment. Residentials often make one get an impression on residential areas and population density. That would get lost.

From my test (some comparison images are linked below) - rendering highway=residential on z12, less prominent than highway=unclassified improves map for locations without mapped landuse=residential. But for places where landuse=residential is mapped it is better to not render these roads.

http://i.imgur.com/rUEOLI8.png

http://i.imgur.com/Tp736hw.png

http://i.imgur.com/raJ3FVw.png

http://i.imgur.com/J1UuqDT.png

http://i.imgur.com/eLuL1T7.png

http://i.imgur.com/qV3He6l.png

http://i.imgur.com/IW4oz01.png

http://i.imgur.com/vSpx5aL.png

http://i.imgur.com/rKzCTgX.png

http://i.imgur.com/GhL7GX8.png

http://i.imgur.com/O7Nft6h.png

http://i.imgur.com/Z19ZrDD.png

http://i.imgur.com/M3Gqeuj.png

http://i.imgur.com/vsvgZFj.png

http://i.imgur.com/uTDf5zz.png

http://i.imgur.com/EG9eTcv.png

http://i.imgur.com/dZNJDPS.png

http://i.imgur.com/LbZJLtM.png

http://i.imgur.com/LDgFrRp.png

http://i.imgur.com/Mhh4BIi.png

http://i.imgur.com/orusQI1.png

http://i.imgur.com/N9rjIaL.png

http://i.imgur.com/8FNAYWI.png

http://i.imgur.com/nQu7KXZ.png

http://i.imgur.com/mScRDnw.png

http://i.imgur.com/zDZLQy0.png

http://i.imgur.com/SAWln34.png

http://i.imgur.com/RBoKwjj.png

http://i.imgur.com/6JBgdFI.png

http://i.imgur.com/ZJrlCaB.png

http://i.imgur.com/vFUHPRm.png

http://i.imgur.com/t7ifFxv.png

http://i.imgur.com/ZLSyyNi.png

http://i.imgur.com/xyYPkVm.png

http://i.imgur.com/wrg90tY.png

http://i.imgur.com/m6VXGjA.png

http://i.imgur.com/70XQdHt.png

http://i.imgur.com/eBcQEOj.png

http://i.imgur.com/NH0UN2F.png

http://i.imgur.com/BMOWFBJ.png

http://i.imgur.com/PcBCfkm.png

http://i.imgur.com/Z4Tncd8.png

http://i.imgur.com/CsXpXnj.png

http://i.imgur.com/lEPJRio.png

Discussion

Comment from imagico on 18 July 2015 at 18:08

Have you looked into the possibility of using a grained fill pattern to indicate unpaved roads? From my point of view it seems the only possibility to do that with the current toolchain is to generate polygon geometries from SQL with ST_Buffer() but this might not be too bad performance wise. And optically this could really be a very good solution.

I do not think the dashed fill works so well. Intuitively dashed line signatures tend to indicate some global abstract difference (like legal restrictions, underground location etc. for roads) and not local properties. And in general dashed lines where the dash length is not much larger than the line width often work poorly IMO. Using a kind of dotted line would probably look better but neither seems a very good solution to me.

For z=12 i think if you don’t show minor roads you also should not show buildings.

Comment from kocio on 19 July 2015 at 04:02

I think the only sane solution is to just start drawing landuse=residential where they are still not tagged. This is exactly kind of synthetic measure needed for low and medium level, the same as other types of areas like forests, farmlands or water.

Residential roads clearly belong to higher zoom level, z=12 is too early for them - it already makes more complete mapped places look worse and less mapped places look better, so I consider it kind of penalty for making good work.

Why should we wait any longer - and how long should it be?

Comment from yvecai on 19 July 2015 at 18:55

Have you tried a dashed casing ? A straight casing on one side and dashed on the other with line-offset ?

Comment from rmikke on 19 July 2015 at 20:10

I have seen an idea somewhere in OSM forum that appeals to me. Why not leave fill and casing for road class and for unpaved roads scatter some dots in casing colour throughout the fill?

Comment from Richard on 20 July 2015 at 07:11

imagico’s idea of a grained fill pattern is interesting.

I generally favour dashed casing for unpaved roads (for example, http://cycle.travel/map?lat=44.1224&lon=-124.1114&zoom=15 ) - it’s widely understood, doesn’t conflict with other styling on the stroke, and means you can show unpaved roads on uncased strokes when you zoom out. As you say, though, it does leave open the question of what to do about tunnels.

One commonly used trick is to use dashed casing for tunnels while removing the stroke entirely. Removing the stroke entirely is one option (which, in Mapnik, I think would mean you’d end up drawing the casing as two dashed lines at +/- offset, and no ‘stroke’ at all) and can look good.

Another one is to use a translucent stroke for tunnels - probably entirely uncased, though you could try it with a dashed casing. I do this for my Illustrator canal maps.

One final option is a lighter stroke, with a solid casing in the normal colour of the road: for example, for current highway=trunk, ‘normal’ green casing with a lighter green stroke.

Your choice, but to my mind, the clarity of dashed lines for unpaved roads makes it worth investigating alternative solutions for tunnels.

Comment from butrus_butrus on 22 July 2015 at 09:20

Hi!

I would definitely render higway=residential @ z12. On the other hand one could consider not rendering area=residential at this zoom-level at all. It is anyway rather problematic in many cases how it is mapped.

Comment from Mateusz Konieczny on 22 July 2015 at 12:49

Have you looked into the possibility of using a grained fill pattern to indicate unpaved roads?

No, I still need to test this.

For z=12 i think if you don’t show minor roads you also should not show buildings.

Yes, buildings result in a noise. But maybe keeping the biggest ones makes sense? I am still testing it and it seem that keeping buildings larger than 2px/2.5px/3px is optimal.

One commonly used trick is to use dashed casing for tunnels while removing the stroke entirely.

Probably it will make tunnels nearly invisible but it is worth trying.

translucent stroke for tunnels

Transparency leads to uncontrolled results with so many displayed landuses so it is better to avoid it.

It is anyway rather problematic in many cases how it is mapped.

In general, in many places it is simply not mapped. I am not aware about incorrect and hard to fix misuse of landuse=residential that is so widespread that stopping rendering it would be a good idea.

Comment from butrus_butrus on 22 July 2015 at 14:26

It is anyway rather problematic in many cases how it is mapped.

In general, in many places it is simply not mapped. I am not aware about incorrect and hard to fix misuse of landuse=residential that is so widespread that stopping rendering it would be a good idea.

In many places it is just not clear what should be mapped as landuse=residential because it is not obvious on the ground. Therefore I don’t see much sense in displaying it - at least at such zoomlevels.

On the other hand the residential streets clearly exist on the ground an therefore should be rendered even at z12!

Comment from joost schouppe on 23 July 2015 at 09:43

For the paved/unpaved rendering: I don’t see much difference between the scenarios. What I am missing though, is a view at low zoom levels.

Comment from Mateusz Konieczny on 29 July 2015 at 17:04

In many places it is just not clear what should be mapped as landuse=residential because it is not obvious on the ground.

I think that overall consensus is that mapping landuse=residential makes sense. It is possible to improve wiki, but this probably should be discussed on wiki or tagging mailing list.

On the other hand the residential streets clearly exist on the ground an therefore should be rendered even at z12!

In the end highway=residential roads are visible on z12, but thinner than before.

Comment from PastorJ on 3 September 2015 at 10:40

Thanks for this work on unpaved roads (and the “Assumptions” section on the Highway wiki). My primary focus is in Rwanda where almost all roads (except the main trunk roads) are unpaved. It makes little sense to call an unpaved road ‘primary’ because the map rendering implies a very nice road between cities or towns – so the map does not adequately reflect the actual road conditions. Most mappers are using Tertiary or Unclassified for roadways (or residential in towns) since this provides a better impression of the actual road conditions. For African countries, the ‘surface’ attribute is more important for motorists than an arbitrary classification of importance (primary, secondary, etc). As a Westerner living in Africa, let me know if there is anything I can do to help with the development of road classifications. Thanks!

Log in to leave a comment