Mateusz Konieczny's diary

Recent diary entries

comparing openstreemap-carto to other map styles

Posted by Mateusz Konieczny on 18 July 2016 in English (English)

This is the first part of comparing openstreetmap-carto and other map styles. Note that comparison is focused on finding things that may be improved in openstreetmap-carto.

Relief data

All maps in my basic sample turned out to show relief data. It ranges from subtle, almost unnoticeable to extremely heavy and dominating over all other features. Is is open question whatever adding rendering of elevation data to openstreetmap-carto would be desirable. But it is clear that rendering elevation data is common, and in some cases effect is great.


But even assuming that it would improve map there are some complications:

  • more non OSM data - what would run contrary to attempts reducing usage of external sources. It may be even considered as misleading given that OSM has no terrain data.
  • Default map already renders many things. Adding something completely new to render would need really good justification and would be very complicated to do well
  • To render elevation data source of worldwide elevation data on suitable license is necessary. Some data is available but either it requires major work to fix voids/peaks/pits (see for some examples of complication). There are some sources with this problems partially fixed - and seem to be the most popular, but both have a problematic copyright status. First has "Users are prohibited from any commercial, non-free resale, or redistribution without explicit written permission from CIAT", second claims that "Elevations and contour lines are facts that should be ineligible for copyright". While I agree that this should be ineligible for copyright I am not sure whatever these data is eligible for copyright (or fall under equivalent laws). AFAIK it is likely to be covered under database rights (collection of data may be protected even if individual entries are not copyrighted and there is no creative work involved).

See comparison of maps in a basic sample.


The previous comparison is revealing also another weakness in openstreetmap-carto - it is not capable of diplaying landmarks earlier. Google maps is fairly good at this - though with results badly affected by fact that "business paid for advertising" is one of criteria for landmark. Sputnik is trying, sometimes with fairly good results, sometimes with rather poor. But this problem is mostly affecting higher zoom levels.

On lower zoom levels mostly two types of landmarks are visible - "the highest mountain in region" visible above gives quite good results.


Sputnik seems to be also quite good at deciding which airports should be rendered. There are some mistakes, but overall their algorithm works fine. See Atlanta or Bogota with cluster of airpots to the west and cluster of airports in the eastern direction.

It is interesting whatever solely OSM data is used here.

See "Too many tiny private airports on the map at small scales".

Problem with minor railways pretending to be major

Posted by Mateusz Konieczny on 17 July 2016 in English (English)

There is one common tagging problem - missing service tags on minor railways. It leads to a poor rendering on lower zoom levels, as renderers are rendering minor service tracks like important railways.

It is quite easy to spot places that require fixing by browsing map on lower zoom levels - see for example

This place at times of writing has noticeable bundle of rails near McAlester, indicating place where somebody mapped minor railway tracks without marking them as minor (note for this case is at


See for documentation how service tags should be used for railways. Note that remote mapping generally is not feasible as result of subtle differences between yard and siding.


Image by Basil D Soufi, CC-BY-SA license.

GSoC 2016 - marking cities

Posted by Mateusz Konieczny on 19 June 2016 in English (English)

It is typical for maps covering large areas to display city labels. It is quite common to mark exact locations by displaying dots, circles or other symbols.

It also seems that labels for cities and towns may be displayed larger to improve the map.

I tested both ideas, without changing algorithm that selects cities and towns to be displayed. Example of before/after tested on UK are available below.

z11 github github

z10 github github

z9 github github

z8 github github

z7 github github

z6 github github

z5 github github

I ma not entirely sure about dots and I will certainly experiment with tweaking them, but I am happy with new sizes for city labels.

Additional before/after are available at

Location: Kosocice, Swoszowice, Krakow, Lesser Poland Voivodeship, Poland

Google Summer of Code 2016 - improving openstreetmap-carto

Posted by Mateusz Konieczny on 14 June 2016 in English (English)

During GSoC 2015 I focused on improving road presentation in the Default OSM map style. This year I am again participating, but with more diverse goals. I am planning to improve performance, reduce rendering order problems and tune mid-zoom level rendering.

mid-zoom level rendering

I started with work on improvements to mid zoomlevels (z6 to z9). During search for the best and most promising ways to improve rendering, starting from trawling through reported issues. I also prepared and submitted some additional tweaks like rendering names for barriers, fixing viewpoints and forests and shops and other.

I am also like during GSoC 2015 preparing a comparison between the current map style and alternatives.

A bit of history

There are some visualisations showing how data was added to OSM. But I have neither seen nor found something similar for a map style. So, for start of next big series to the map I made a display of what was changed in the past.

Visualisation are available for z18 z18

z14 z14

z8 z8.

I selected Weybridge as location as map of this place was the first OpenStreetMap-based map to go on Wikipedia.


As usually testing and review is welcomed for open pull requests, especially one considering rendering names for barriers and an associated popular tagging mistake.

I am considering to look more for inspiration/comparison in printed maps. I looked for online sources and for now I found surprisingly small number of contemporary maps that would display sort-of-similar set of symbols as Default OSM style, with scale within z5 - z10 range.

From promising findings I caught David Rumsey Map Collection and Wikimedia Commons (enabling CCI allowed to find something).

But I found nothing highly useful. For now

are the best. Is anybody aware about maps or database of maps allowing to find maps similar in content to Default OSM Style, with scale within z5 - z10 range?


Thanks to Paul Norman for simplified osm2pgsql database dump. Without that resource obtaining database for lower zoom levels would be far more complicated.

Location: Kosocice, Swoszowice, Krakow, Lesser Poland Voivodeship, Poland

Proposed mechanical edit: surface=woodchip to surface=woodchips

Posted by Mateusz Konieczny on 1 September 2015 in English (English)

this entry is copy of

I plan to change surface=woodchip to surface=woodchips.

surface=woodchip is a clear duplicate of surface=woodchips. It is also less popular and undocumented on Key:surface. It would be a good idea to retag it to already documented tag before this tags are used more.

amount of surface=woodchip in OSM as of 2015-09-1 is 135.

amount of surface=woodchips in OSM as of 2015-09-1 is 228.

I'd download all surface=woodchip using Overpass API and change the tagging by search and replace using Level0 editor. The upload of the changed data I'd do in chunks to check the data once more before upload and not to create a worldwide changeset.

This would be a one time edit.

Edits will be made from account "Mateusz Konieczny: bot account"


state before mechanical edit:


state after mechanical edit:


Changeset comment would be " changing surface=woodchip to surface=woodchips as surface=woodchip is less popular duplicate. This mechanical edit is documented at "


Posted by Mateusz Konieczny on 31 August 2015 in English (English)

It is not OK to use one tag (for example amenity=hotel) and add second tag that negates or massively change its meaning (for example adding involuntary=yes to amenity=hotel instead of using amenity=prison). Additional tags should clarify meaning of main tags rather than negate it.

In general, any tag tag must be processed to avoid producing false or invalid data is a trolltag.

For example somebody wants to produce map of cycleways. Simply processing highway=cycleway and highway=path with bicycle=designated should be enough. Data consumer in that situation should not be expected to check for "proposed=yes", "demolished=yes", "construction=yes", "completely_fictional=yes" or "end_date=1990".

Obviously, one may want to look for more detail - for example to show proper map of cycleways one would want to check also access, surface, oneway and other tags. But again - segment of cycleway destroyed in landslide should be removed from map rather than tagged as [highway=cycleway, surface=giant_gaping_hole, smoothness=impassable].

Adding tags like proposed=yes is a really poor idea. In case of data consumers not supporting them it will lead to invalid and highly misleading data. And data consumers supporting completely broken tagging schemes (like [highway=tertiary; construction=yes] instead of supporting just [highway=construction, construction=tertiary]) encourages usage of this tagging method. The danger is that with more and more data tagged using trolltags other data consumers will either be forced to add support for trolltags or stop using OSM data.

And possibilities for trolltag are endless. Lets say that somebody wants to display existing shops and support all tagging schemes. Good luck with filtering out proposed=yes, abandoned=yes, vacant=yes, demolished=yes, construction=yes, empty=yes, ruins=yes, parsing start_date and end_date etc etc.

Some real examples: - there was a building. Then it was demolished. But somebody, instead of deleting it from OSM (or maybe temporarily converting it into note="there was building here now it is demolished") decided to add demolished=yes. - railway=route tagged on highways and footways. To detect that this is not a railway route but original research about line that was closed over 80 years ago one would need to process "note=abandoned railway" or "railway:end_date=1931"

In many cases (like this two cases above) correct mapping is no mapping whatsoever. What existed in past and is not existing now should not be mapped in OSM (see - "What it doesn't include is opinionated data like ratings, historical or hypothetical features, and data from copyrighted sources.").

In other cases objects should not be deleted but retagged. For example in really rare cases mapping proposed roads makes sense. Maybe some proposal for constructing footways are also verifiable. But in that case use [highway=proposed, proposed=footway] rather than [highway=footway; proposed=yes]. At least normal data users will not be mislead into displaying proposals as reality. (and yes, somebody did it - see ).

It is OK to map objects under construction. But [highway=footway; construction=yes] is the best method to irritate data consumers (real - see Use [highway=construction; construction=footway] instead.

And good luck with interpreting [construction=yes; railway=tram_stop; start_date=2012]. Is it construction that was supposed to end in 2012? Is it construction that was supposed to start in 2012? And almost everybody will process it as an existing tram stop. It would be better to avoid mapping until it was really constructed (or use something like [construction=tram_stop, end_date=2012])

Note that some tags may be OK or trolltag depending on how it is used. For example abandoned=yes. It is perfectly OK to add it to building - after all, abandoned building is still building. But using it on shop=supermarket to indicate that shop is no longer operating and it is impossible to buy anything there (in other words - it is no longer a shop) is not OK and should be tagged in proper way (typically - by deleting shop=supermarket).

Disclaimer - trolltags are frequently not processed and ignored. As result it is typical that [highway=motorway, construction=yes] is no longer under construction and may be used. This type of issues as usually requires survey on the ground to be properly fixed.

And you may use this overpass query to detect more in your region - (it includes tags that nearly always are trolltags - but certainly some false positives will appear. For example vacant=yes is fine for building).

OpenStreetMap Carto 2.34.0

Posted by Mateusz Konieczny on 29 August 2015 in English (English)

Most obrotowy w Giżycku

OpenStreetMap Carto 2.34.0 has been released and rolled out to the servers. It might take up to 48 hours before all tiles show the new rendering.

Changes include

  • better rendering for highway=path/footway/cycleway - this is the next iteration of improving how footways and cycleways are displayed. Unpaved footways are now visible on natural=bare_rock and there are now three classes: paved, unpaved and unknown surface #1788
  • man_made=bridge is now rendered #1633, #1791
  • new rendering for landuse=quarry #1696
  • amenity=veterinary is now rendered #1656
  • amenity=community_centre is now rendered #1744
  • amenity=prison and landuse=military rendering takes in account area size #1739
  • consistent color for boundaries #1773
  • tweaked zoom level for amenity=car_sharing #1762 and amenity=car_rental #1761
  • Mapnik 3 preperations are now finished. The style now supports Mapnik 3. Most of the work was done on the Mapnik side. #1792

A full list of changes can be found on Github.

Style for footways and cycleways is not ideal and there are some known problems (see #1793 and #1748). Pull requests that would solve this issues are welcomed.

It is a good idea to check whatever bridges in your region are tagged for renderer - mistagging bridges as buildings is quite popular (only rare constructions fit definition of building=bridge - building=bridge is brown and man_made=bridge is gray).

For people interested in adding surface tags in their area - here is a helpful overpass query (zoom in before using "Run" button): This query return ways without surface tags and ones tagged with tags not documented as valid surface values. Only ways with highway=footway/path/cycleway are displayed. In nearly fully mapped regions one may modify query to search for missing surface also for other highway types.

As always, we welcome bug reports at where they will be tracked.

Previous release announcement:

Location: Wilanów, Giżycko, powiat giżycki, Warmian-Masurian Voivodeship, Poland

New road style for the Default map style, the full version - PR, casings on z11

Posted by Mateusz Konieczny on 14 August 2015 in English (English)


Next pull request for changing road style was opened. This time it is a final stage of proposing a rendering change including new colours for roads, new widths and rework of a railway styling. Feedback is welcomed.

PR link:

All changes before PR were squashed into two commits - as result changes done based on feedback since creating PR are listed on

Casings on z11

One of repeated comments was that casings on z11 are not working well. Therefore I prepared also another casingless variant for z11. Below are test renderings for some places (current rendering, rendering from PR, potential rendering using low zoom styling for z11)



Iceland, Reykjavik




New Jersey

Rural UK


z11 will be now using casingless style, especially as attempt to improve casings on low zoom by reducing it failed to solve problems with pixelated casings and managed to create new.

New road style for the Default map style, the full version - high zoom

Posted by Mateusz Konieczny on 10 August 2015 in English (English)

highway=pedestrian/living_street is this comparison was set to pale gray/gray version. Reported problems were fixed, resulting in new shield colors, tweaked road color and subtler casings. Thanks for the feedback!

This comparison is using latest version of style, newer than one used on the OSM website. The most important change is the new forest style.

For start: place that had problem with too strong casing resulting in problems with bridge that was not sufficiently different from other sections of roads. It is now improved - and now it should be OK.

What is preferable? Large images or smaller ones next to each other (like in the previous entry)? Or maybe big pictures next to each other - but available as links and not inlined (like many in this older entry)?


Default OSM style is displaying huge amount of information. Here is image of displayed road types on some of landcovers. Note that due to size limitation effects of service tags (that would tripple different road styles) are not displayed.

Full image

New road style fixes problems with certain road types invisible on common landcovers, but there are still some situations where road is too close to landcover. Unfortunately, as result of huge amount of landcovers it is not easily fixable - but new problems are a bit less severe than old "trunk is invisible in forests, secondary is invisible on farmland".

highway=motorway through landuse=military is poor

highway=secondary shield is almost the same as the heath color

highway=secondary is close to natural=beach

highway=trunk infestation in San Paulo

Posted by Mateusz Konieczny on 8 August 2015 in English (English)

To anybody editing in region of San Paulo - it seems that road classification in this region is thoroughly broken (many highway=trunk that probably should highway=tertiary/secondary given how road ends etc etc). It seems that somebody tagged all dual carriageway roads in this region as highway=trunk.

I opened also some notes - is there any better method of contact with local community?

Location: Vila Aurora, Mandaqui, São Paulo, Microrregião de São Paulo, RMSP, Mesorregião Metropolitana de São Paulo, São Paulo, Southeast Region, Brazil

New road style for the Default map style - the full version

Posted by Mateusz Konieczny on 8 August 2015 in English (English)

Next stages of developing new road style are finished.

First changes all already present on OSM website as result clutter on mid zoom levels is now reduced (#1682, #1690 and #1676).

This version is the first one tested also for low zoom levels.

And at start of this preview of the new style I want to thanks everybody who offered feedback. Obviously, not every suggestion was implemented - but many were highly useful and some are used. Thanks to everybody! Special thanks to Paul Norman for simplified osm2pgsql database dump that allowed to test low zoom levels.

For start - rendering for both in current and the new style (note - missing data that is causing poor rendering of railways in Antwerp is now fixed).

z11 50 8288 4 3684 z11 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px 50 8288 4 3684 z11 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z10 50 8288 4 3684 z10 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px 50 8288 4 3684 z10 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z9 50 8288 4 3684 z09 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px 50 8288 4 3684 z09 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z8 50 8288 4 3684 z08 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px 50 8288 4 3684 z08 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z7 50 8288 4 3684 z07 750px c6942c7a16fbd8f0048a8be8d7bf3703243b02e1 750px

z6 50 8288 4 3684 z06 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px 50 8288 4 3684 z06 300px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 300px

z5 50 8288 4 3684 z06 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px 50 8288 4 3684 z06 300px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 300px


z5 -36 8487 174 76135 z05 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px -36 8487 174 76135 z05 300px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 300px

z6 -36 8487 174 76135 z06 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px -36 8487 174 76135 z06 300px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 300px

z7 -36 8487 174 76135 z07 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px -36 8487 174 76135 z07 750px c6942c7a16fbd8f0048a8be8d7bf3703243b02e1 750px


-36 8487 174 76135 z08 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px -36 8487 174 76135 z08 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z9 -36 8487 174 76135 z09 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px -36 8487 174 76135 z09 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z10 -36 8487 174 76135 z10 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px -36 8487 174 76135 z10 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z11 -36 8487 174 76135 z11 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px -36 8487 174 76135 z11 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

And yes, this volcanoes are tagged correctly - see


Place mentioned in bug report #102 - "Secondary and trunk color too similar to landuse colors"

z5 malmo - fields 55 39276 13 2979 z05 300px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 300px

z6 malmo - fields 55 39276 13 2979 z06 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px malmo - fields 55 39276 13 2979 z06 300px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 300px

z7 malmo - fields 55 39276 13 2979 z07 300px d396f750d41db78c227c62290f5dfeefbb91a730 300px malmo - fields 55 39276 13 2979 z07 750px c6942c7a16fbd8f0048a8be8d7bf3703243b02e1 750px

z8 malmo - fields 55 39276 13 2979 z08 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px malmo - fields 55 39276 13 2979 z08 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z9 malmo - fields 55 39276 13 2979 z08 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px malmo - fields 55 39276 13 2979 z09 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z10 malmo - fields 55 39276 13 2979 z10 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px malmo - fields 55 39276 13 2979 z10 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

z11 malmo - fields 55 39276 13 2979 z11 750px d396f750d41db78c227c62290f5dfeefbb91a730 750px malmo - fields 55 39276 13 2979 z11 750px 0eb62a8e825d0eeb622e072ac4830231bfa1f6e5 750px

Preview location from readme

preview pri7 -87 6515 41 8693 -87 615 41 8788

Current style:


One of changes that I especially like are new railways - now less likely to be confused on low zoom levels with minor roads. service tag is now used more for railways - minor tracks are rendered later (change already deployed on OSM website) and now main railways tracks are also more prominent. Tunnels for railway=rail also were changed to version that is prettier and consistent with other railway tunnels.

Here are some additional examples with comparison how railway rendering may change.

london - railway tunnel 10 19 master - master 400px london - railway tunnel 10 19 new-road-style - new-road-style 400px

krakow - minor major railways 10 19 master - master 400px krakow - minor major railways 10 19 new-road-style - new-road-style 400px

highway=pedestrian, highway=living_street

I have a problem with colors for these road types. It is desirable to keep these distinguishable, using white colour and differentiating by width is not feasible.

Current colors are quite confusing - OK, highway=pedestrian is a bit darker. Then why living street - something between highway=pedestrian and normal streets is even darker?

The obvious solution - switch colors is problematic, as it makes squares really ugly:

vatican - square new-road-style -_ new-road-style 17 17 new-road-style - new-road-style 350px london - trafalgar square new-road-style -_ new-road-style 17 17 new-road-style - new-road-style 350px

It is possible to make both living street and pedestrian lighter.

vienna - square around church in the cetrum megacollider -_ megacollider 17 17 megacollider - megacollider 350px

but it makes highway=pedestrian and landuse=residential areas too close:

conflict with landuse residential - orchester megacollider megacollider-_megacollider 17 17 350px megacollider - megacollider 350px

Reddish highway=pedestrian was promising

living street pedestrian red -_ red 17 17 red - red 350px

until it turned out that it collides with other landuse

test_pedestrian_on_industrial 1 red red-_red 17 17 350px red - red 350px

Other PRs

During work on road rendering I discovered that map would look better with some landuses becoming lighter and less saturated. Therefore I slightly modified old proposal to modify rendering of forests and submitted it as #1728 (I opened a new PR as code needed to be updated).

There is an open PR that would unify highway=path and highway=footway styling and show surface for highway=path/footway/cycleway - #1713

There is also a PR that would improve rendering of highway=raceway: #1712

Also there are also PRs that would make farmland and power areas less prominent - see #1701 and #1680.

During development of road style some long-standing bugs were sufficiently annoying to prepare code fixing this issues. Once test images will finish generation I will send also fixes for #1143, #686 and part of #1648


Some other minor changes like tweaking display of steps will be present in the next release


It is quite interesting - some changes are quite simple, like in this case. Entire PR was changing only one number. But preparing even such easy changes without causing problems requires testing many locations and weird situations to avoid unexpected reducing in quality of rendering. In that case during preparing I tested several other variants - maybe even smaller (it was no longer looking like steps)? Maybe increase distance between red dashes (it no longer looked like a single element)? Maybe make red dashes narrow (it was not noticeable enough in typical cases)? Maybe reduce width but not so much (it was worse in areas of high steps density without benefit for typical situation with single steps in areas).

New road style for the Default map style - the second version

Posted by Mateusz Konieczny on 23 July 2015 in English (English)

"map styles: Default OSM vs Google Maps" included comparison of OSM Default map and Google maps. Now I present a similar comparison at the same location. But now with a third version - current version of new potential road style.

From left: (1) with changes developed as part of road redesign (2) currently used rendering on OSM website (3) Google maps

Maybe it would be a good idea to make landuse=residential darker on low zoom levels to better mark built up areas, but overall I consider this change as significant improvement.

Changes based on feedback:

Thanks to daganzdaanda for the idea of displaying highway=tertiary as white line, wider than highway=residential/unclassified. As tertiary roads are no longer using yellow it made possible to display secondaries using this color, what it turn allowed to move hue of primary toward yellow.

It was not simple as it sounds. For example, one of obvious consequences is that yellow roads are now rendered also on lower zoom levels. It is problem because the yellow roads are hard to keep visible both on landuse=farmland and unmapped land. For example using light yellow worked great on farmland but completely failed on unmapped land where it was really hard to notice.

Making highway=primary yellower allowed to render trunk in orange and keep road classes possible to differentiate.

So: highway=trunk and highway=motorway are now rendered differently.

See for example highway=trunk near Košice and D1 motorway.

and now with the new style. Game "spot highway=trunk" is now less challenging and it should be distinguishable from motorway.

And view at the preview location from readme

Using a grained fill pattern to indicate unpaved roads is an interesting idea that will be tested. I will also test idea of using dashed casing for unpaved roads with tunnels marked solely by colour change of fill and casing. There was also idea of displaying tunnels as without fill what is also worth testing - but it is likely that displaying unpaved roads as one with dashed casing and fill would be too close. Also, size of ref shields should be reconsidered - it seems possible to make them small without losing readability.


There are also changes to how railway are displayed. Some improvements of rendering railway=tram will be used after next update of map style on OSM servers. But there also problems with rendering railway=rail - both major and minor (marked by service=spur/siding/yard) rails are rendered really close. At lower zoom levels rendering of railway=rail is really close to rendering of minor roads.

I am experimenting with changes to rendering of railways. Some changes are ready to presentation and effects are visible on presented examples.

Accepted changes

I am trying to find as many improvements as possible that may be proposed, discussed, improved and accepted as an isolated change. It makes discussion easier and bugs are less likely.

Turning circles on highway=track are no longer too big, code was improved. In addition highway=proposed is no longer rendered (for discussion and reasoning behind decision see

Currently proposed changes

There are also active pull requests, some of mine are done as part of road redesign. For example there in pull request proposing better display of minor tram tracks It is open question whatever railway=tram with service=spur/siding/yard should be rendered on z14 and z15 - feedback is welcomed (more locations with rendered before/after are listed on github).

Examples of current work

Stopping too early rendering of highway=residential allows to achieve improvements like demonstrated in the first picture demonstrating changed rendering in London. But ceasing to render highway=residential on zoom levels 12 makes noise created by small buildings noticeable. These buildings are too small to be rendered in useful way but big enough to create noticeable changes.

The simplest solution would be to start rendering buildings from z13, one zoom levels later. But some of largest buildings may be usefully rendered on z12. Also, as usually there are additional complications (for example - moving only rendering of buildings to higher zoom level is not enough - it is necessary to move also rendering of amenity=place_of_worship).

On the left - current style. On the right - new style, including removal of highway=residential on this zoom level

And three examples of buildings may be handled:

stop rendering of all buildings (even the largest ones)

stop rendering of small buildings (threshold is arbitrary what is quite noticeable. In many places it is clear that some buildings are rendered and some not despite nearly the same size)

render only big buildings on z12 (my favourite - but it still arbitrary threshold and some big ones will not be rendered. But as rendered buildings are quite rare it is not so noticeable)

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

Posted by Mateusz Konieczny on 18 July 2015 in English (English)

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.


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

  • (1) lack of fill, only 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 of tunnel style with a new meaning.

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

  • (4) new separate colours of fill/casing - changing only 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 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.


On 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

City with some unpaved roads

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

Paved and unpaved raceways.

City with curvy unpaved roads

Unpaved road with access=private

Unpaved road in the city

Unpaved road in suburbs

Unpaved roads in a village

Unpaved road with access=destination

Unpaved tertiary road

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 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.

New road style for the Default map style - highway=path is evil

Posted by Mateusz Konieczny on 14 July 2015 in English (English)

changes based on feedback (comments on diary and github):

Reverted highway=footway, highway=path changes and restored currently used version. highway=motorway, highway=trunk rendering will be distinguishable. For oneway arrows old blue version also will be considered.

In addition feedback confirmed that it would be a good idea to: render motorway junction labels in red and rework widths of roads.

Example of current rendering of pedestrian area (left - current rendering, right - proposed new rendering). highway=footway styling was rolled back, but highway=pedestrian/living_street is changed.

pedestrian_living street in bratislava master-_new-road-style 18 18 350px master - new-road-style

Request for a testing place

I am looking for well mapped place where displaying highway=residential on z10/z11/z12 makes sense and is desirable. I am also looking place where rendering highway=unclassified at z10 is a good idea. According to my tests rendering these roads later improves situation, except places with badly mapped road types (highway=residential linking towns etc).

highway=residential rendering starting at z13, instead of z10 (on the right - rendering of minor roads starts later) sao paulo new-road-style-_hide-residential -23 591 -46 5642 350px new-road-style - hide-residential tunis tunisia new-road-style-_hide-residential 36 8481 10 2289 350px new-road-style - hide-residential

z10 without both highway=residential and highway=unclassified (on the right - rendering of minor roads starts later) sao paulo new-road-style-_also-un -23 591 -46 5642 350px new-road-style - also-un chennai india new-road-style-_also-un 13 07886 80 27261 350px new-road-style - also-un

After such change it would probably be a good idea to make landuse=residential darker on z10/z11/z12 to make area covered by settlements clear.

Testing road width

I am experimenting with resizing roads and I would welcome feeedback on these presented versions - what is a better version for highway=residential/living_street/pedestrian? Left or right side? Or maybe both are too narrow/wide?

rural area where highway footway are important narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow prague czech republic narrow-subtle-_narrow 50 0853 14 432 350px narrow-subtle - narrow helsinki finland narrow-subtle-_narrow 60 16827 24 93188 350px narrow-subtle - narrow chennai india narrow-subtle-_narrow 13 07886 80 27261 350px narrow-subtle - narrow bangkok thailand narrow-subtle-_narrow 13 7529438 100 4941219 350px narrow-subtle - narrow sao paulo narrow-subtle-_narrow -23 591 -46 5642 350px narrow-subtle - narrow fully mapped residential area narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow ciudad de mexico narrow-subtle-_narrow 19 4216 -99 0817 350px narrow-subtle - narrow roads with tram lines narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow large area with high road density of many types narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow city with high road density narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow krakow - stare miasto narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow european style town narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow european style city narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow extreme road density narrow-subtle-_narrow 14 14 350px narrow-subtle - narrow

Note - I would welcome examples of well mapped rural areas for testing locations.

highway=path, highway=footway problems

according to

highway=path is a generic path, either multi-use or unspecified usage, open to all non-motorized vehicles. The path may have any type of surface.

This includes walking and hiking trails, bike trails and paths, horse and stock trails, mountain bike trails, ski[disputed] and snowmobile trails[disputed] as well as combinations of the above

It is a big problem for designing rendering. Given that definition from wiki highway=path may be anything from paved cycleway, though paved footway or horse trail to mountain bike trail. Some even include snowmobile trails existing only during winter as acceptable feature to be mapped as highway=path.

yes, wiki mentions that it may be tagged highway=path

For general rendering it would be preferable to have two tags - one for footways/path/sidewalks open for pedestrians and second for weird cariations like mountain bike trails and snowmobile trails existing only during winder rather than currentt situation.

But in reality overhelming majority of highway=path is used to map paths that are not more open to non-motorized vehicles than highway=footway. It also seems that as result of difference in Default map style it is very common to consider highway=footway as paved and highway=path as unpaved. Confirmations/refutations are welcomed as my personal experience is mostly limited to Poland - elsewhere it is mostly guessing based on limited research.

So there are following possibilities that may work:

path/footway difference

  • consider highway=path to be unpaved and highway=footway to be paved (current situation)
  • stop differentiating between highway=path and highway=footway (render both using current styling of highway=footway or highway=path)
  • stop differentiating between highway=path and highway=footway, render them differently based on surface tag
  • invent a new tagging style (highly unlikely that something replacing highway=path/footway would be accepted, but current one may be improved - see for example )

special access on highway=path (cycleways, bike trails, snowmobile routes)

  • consider popular combinations equivalent to already rendered road types (curren situation, for example [highway=path; bicycle=designated] is considered to be equivalent of [bighway=cycleway]), ignore other)
  • detect popular combinations, in addition attempt to detect other special cases and do not display highway=path in such cases (foot=no would cause highway=path to not be rendered, except cases where it would be rendered thanks to fitting one of popular combinations)

I would welcome opinions on these possibilities and other ideas that would work. There possibilities that are not listed here because it would lead to poor results. For example differentiate rendering based on both highway=path/footway and surface value with four different stylings is not something that would work. Special rendering for every special case of highway=path is also impossible with style that is supposed to be usable. Ceasing to detect [highway=path; bicycle=designated] makes no sense.

In addition it may be considered to is to treat highway=bridleway as synonym of highway=path given relatively low importance of that way type and high similarity.

rendering highway=proposed

Related to current road restyling - see that contains proposal to stop rendering highway=proposed (in that case comments should be posted on github issue).


rendering highway=road

I am not sure how to display this road type. In some way that it would make clear that it should be changed to proper highway type? But it would make the map ugly. But maybe in situation like that it is acceptable?

Attempt to guess what is the most common proper type and render it in this style or close to it as it done currently? But it breaks The Mapper Feedback Loop, also it result in a confusing map where something that resembles highway=unclassified/residential may be anything.

Stop rendering of highway=road? Provided feedback is "you should not use this tag". It also would be highly confusing, this time for people editing map.

accepted changes

Next pull requests related to clutter on clutter around z10 were merged: start displaying minor rail from z13, fixes #1645 #1647. As result railway=rail ways with service=yard/siding/spur are no longer rendered on z11 and z12.

rail - moscow before after

Stop displaying really small zoos and theme parks After that change smaller ones will appear later and bigger on earlier zoom levels (before/after with current road styling).

In the next post, planned on Thursday (16 VII) I will show how trunk/motorway may be differentiated and proposed rendering of unpaved roads (EDIT: unfortunately this post will be delayed).

New road style for the Default map style - the first version

Posted by Mateusz Konieczny on 8 July 2015 in English (English)

The first version of the road style is prepared. It is work in progress and feedback is welcomed. I started work from designing z16 zoom level, currently I am expanding style to cover higher and lower zoom levels.

Current rendering (preview location from openstreetmap-carto readme) preview master -87 6515 41 8693 -87 615 41 8788

Style under development - with its variants preview new-road-style-z16 -87 6515 41 8693 -87 615 41 8788 preview new-road-style-z16-with-purple-pedestrians -87 6515 41 8693 -87 615 41 8788 preview trunk -87 6515 41 8693 -87 615 41 8788

Major roads

Display of major roads on lower zoom levels is currently working quite OK and I am trying to make it better. For example, I am considering various variants how junction names and oneway arrows should be rendered. Below are some of possibilities.

Test renderings are for location from "trunk is invisible in forest and secondary on farmland" bug report. All renderings have for comparison on the left side how map is currently displayed.

gray oneway arrows and red junction names:

gray oneway arrows and blue names:

both gray:

version with modified road colors:

rendering for names and arrows unmodified despite road colour change:

highway=footway, highway=pedestrian

Current rendering of highway=footway is quite noisy, also highway=pedestrian is closer to highway=tertiary in its style than to highway=footway. Dotted highway footway is not pretty - for example rendering proposed by sb12 is much prettier. But finding styling that would at the same time would be prettier than current one, do not look like a road and fulfil additional criteria turned out to be an interesting challenge. Finally, after many failed attempts, I tried as joke styling inspired by OSM landscape. It turned out to be better than expected and was the first one that was considered by testers both as prettier and with readability not worse than the current rendering.

Unfortunately, purple is already used for borders, airport infrastructure, railway landuse and industrial landuse so I am experimenting with both different colour for pedestrian infrastructure and changing landuse colours.

52 4590957 13 362961 16zlevel 450px 1436392632 0 04 50 0559 19 8486 16zlevel 450px 1436253562 0 06


rural area where highway=footway are important: (purple style) (pink style) (based on sb12 style) (orange style)

highway=pedestrian and highway=footway: (purple) (pink) (based on sb12) (orange)

in city: (purple) (pink) (based on sb12) (orange)

pedestrian area & footways nearby landuse=railway: (purple) (pink) (based on sb12) (orange)


Also - something that is already done.

During reworking road style I decided to try changing closely related tram style as on z13, z15, z16 tram lines were too noticeable.

During more close checking of rendering I discovered that tram tracks were rendered also on z10, z11 and z12 what was quite surprising as I never noticed it.

On reading code I discovered that railway=tram was rendered from z8, what makes no sense. Especially with current style as even during looking for tram lines at known positions I failed to notice it.

Overall this was one of many things leading to really bad rendering of cities around z10.

Even in Toronto, city with "the largest streetcar system in the Americas"[1] and quite far on the north (relevant due to distortion of scale) it makes sense to render trams up to z12. It is possible to make a weak argument for rendering at z11. See (I linked overpass turbo, as in current rendering tram lines are not possible to find - despite rendering them).

Other example, Vienna - "With 173.4 km of track, Vienna's network is one of the largest in the world."[2] z11 is the lowest zlevel where rendering tram makes sense ( - note, query returns large amount of data).

In general it seems that even with large networks rendering tram up to z12 makes sense, z11 may be justified but it is not the best idea but later it is rather pointless.

And obviously, there is no point in rendering something in way that makes it impossible to notice it.

Unfortunately it is impossible to make rendering great for all locations. In some places each tram tracks is mapped separately and in some places two tracks are together mapped as a single railway=tram line. In places where two tracks are mapped as one on low zoom levels trams are not displayed not as strong where each track is mapped. Compare for example Praha (where two tracks are mapped as a single railway=tram line) with Helsinki and Kraków (each track mapped as railway=tram line).

Tram rendering is causing exactly the same problem with current road style and my proposed version. Working on it separately makes easier to test and review so I prepared it as a separate change.

Proposed change that should improve situation was merged yesterday - thanks for received feedback!





map styles: Default OSM vs Humanitarian

Posted by Mateusz Konieczny on 10 May 2015 in English (English)

Humanitarian map style is in some ways between current Default OSM style and Google maps style. It is not using so many colours for roads as openstreetmap-carto but still more than Google maps. The same may be said about how quickly minor roads are disappering and some other choices unrelated to displaying roads.

As result Humanitarian style is also better at lower zoom levels than openstreetmap-carto - again mostly thanks to subtler display of minor roads and not using all possible colours to display roads.

Not so wide roads also work better especially in areas with high road density.

It seems that main reason for really wide roads in a Default OSM style is to keep street labels within road area. But both Humanitarian and Google maps have labels sticking outside road areas and narrower roads what seems to work much better. Also in areas that are not so extreme.

Kraków, Poland

In Humanitarian style trunk and motorway are displayed using the same style - it is the next candidate for such merge. Note that at lowest zoom levels there is a difference between trunk and motorway. In Humanitarian map style also highway=footway and highway=pedestrian are displayed using the same style but this union seems to not be really working for general purpose map.

It is also interesting to check how displaying surface tag works in that style. In Humanitarian unpaved minor roads are marked by making road darker, with brown colour. It has a side-effect of making road more visible. It suggests (at least for me) higher importance of road rather than worse surface.

See for example Zliten, Libya - and


All tracks are displayed in the same style (tracktype and surface tags are ignored), all tracks are assumed to be unpaved what is not really working. As highway=track may be anything from something barely usable to high quality road - highway=track is defined by its function, not quality.

For major roads situation is better - making paved roads intensively coloured and unpaved pale works better, though there may be too significant difference between paved and unpaved primary road.


One quite interesting design choice that may be used during road redesign is less prominent rendering of tram lines.

map styles: Default OSM vs Google Maps

Posted by Mateusz Konieczny on 9 May 2015 in English (English)

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 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 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 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. 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 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.

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 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 Goggle Maps also have problem with high road density in London - but road network as presented by openstreetmap-carto is even worse and completely unredable beyond "there are many roads in London". M4 looks like continuation of Thames. Rural areas are not much better (trunk roads through forests etc).


Further zooming out is not improving 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 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.

Lets try another location - in a rural area in UK with much lower road density

Here fact 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 situation 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 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. 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.

Older Entries | Newer Entries