Currently I am working on a GSoC project - improvement of styling of roads and paths in openstreetmap-carto, the default OSM map style.
I started from researching how other map styles are designed. I would welcome comments and feedback as it would allow to notice my biases. Feedback on general ideas will hopefully reduce amount of time needed to rework and tweak style that I will produce.
The first compared map style is probably the most popular one, used by Google maps.
At high zoom levels any OSM map is typically better than Google Maps as a result of more detailed and rich data. Quality of Google Maps is also decreased because one of its primary roles is to be used as a place to advertise businesses - what results in businesses appearing earlier than reasonable and leaving no place for more useful information.
But as one zooms out the situation is typically changing, with OSM rapidly losing - and the worst situation is in the cities, with roads as a major source of a problem.
For example, lets try with London.
First problems are noticeable at z16 - openstreetmap-carto has more information but is also less readable. The first road-related issue is that some oneway roads are without arrows (names are displayed instead making it one of many tradeoffs - not everything may be displayed).
z15 has much bigger problems for OSM - hierarchy of road importance is clearly more readable in Google maps. It is an effect of lower amount of displayed data and no using as many colours as possible in gmaps. openstreetmap-carto is using for displaying roads blue, green, orange, red, yellow and white. Google restricted palette to white, yellow and orange - what gives much better results.
The situation gets continually worse for OSM on zooming out to z14, z13, z12. Nearly all roads continue to be displayed on both maps, but in Google roads of lower importance are nearly invisible, the Default OSM map is much messier. In addition on z12 green trunk roads are merging with parks making the map even less readable.
On z11 Google drops minor roads completely, in OSM are still displayed but no useful information is presented - it results only in a messier map.
On z10 Google Maps also have a problem with high road density in London - but road network as presented by openstreetmap-carto is even worse and completely unreadable beyond “there are many roads in London”. M4 looks like a continuation of Thames. Rural areas are not much better (trunk roads through forests etc).
Further zooming out is not improving the situation for OSM.
First thought is that using blue, green, red etc for roads may work for maps that limits itself to displaying roads, towns and cities - but it is not going to work for a map that is trying to show nearly everything.
Maybe attempting to make highway=primary and secondary, higway=residential and living_street, highway=track and highway=service clearly different is not really necessary? Maybe displaying both using the same style may work better and reduce clutter?
It would be nice to not display roads of lower importance in cities on lower zoom level, but doing it in other areas. Maybe it would be doable by something like making landuse=residential and minor roads the same colour in lower zoom levels? It seems to work in Google maps.
It may seem easy to solve other mentioned problems by starting to render roads of each class later than it is done currently but it is not so simple.
Let’s try another location - in a rural area in UK with much lower road density.
Here a combination of facts that somebody mapped this area in OSM, lack of data in Google maps and low feature density makes OSM a clear winner for z14 and higher. Lower zoom levels are problematic for OSM map. Road network continues to be less and less readable in OSM since z13, famous “green trunk through green area” problem is making it even worse.
Note that rendering roads later what would improve rendering in London means harm for map in low density areas like this one. It would be much better to solve situation differently.
One of limitations is that the same feature in one place may be completely unimportant and critically important in another. For example - one of thousands unimportant highway=footway through a park in a massive city or highway=footway in a remote area of high mountains, the most important feature within several kilometers. Both will be rendered using exactly the same style. Therefore most tweaking of style will improve some locations but make it worse in others, it is completely impossible to make it perfect everywhere. The obvious solution - render features differently in low density areas is really hard to do properly and doing this is not planned as part of this GSoC project.
It may be possible to try different things - minor roads at low zoom levels with the same colour as landuse=residential? Displaying narrower roads? But some tradeoffs will be necessary.