Alternative-colors style at z13
Alternative-colors style at z13

More new colors


I made some more high impact color changes to the alternative-colors style i want to quickly discuss here.

Farmland coloring

First i changed the farmland color. Farmland was is OSM-Carto rendered for a long time with a fairly dark brown tone. This looked odd in particular in contrast to the brighter urban landcovers. Since farmland covers pretty large areas in regions with intensive agricultural use a brighter color makes more sense. The color was therefore changed into something significantly brighter several years ago.

This was a big improvement but maintained the oddity of using a brown color for something vegetation related.

The problem is that in the bright color domain you have relatively little room for multiple distinct colors. Therefore the color had to be pretty strong to be discernible from the other bright colors which was something many people also disliked.

The solution i implemented now is essentially a color swap (plus some tuning) of the farmland color and the education/hospital (societal_amenities) color. This makes quite a lot of sense because of the similarity rule (that features similar in meaning and purpose should use similar colors and those different in meaning and purpose different colors). This is a bit of a disentanglement of area color use in the style.

farmland colors in different OSM map styles

the new farmland color – click to see on larger area

I had contemplated this change for quite a while already but originally was not so satisfied with the result. With some tuning and some time for getting used to it i now however think this works quite well.

Road colors

With the road colors i implemented what is essentially a shift of the road classes by one downwards and extrapolation of a new color for motorways at the top extending the existing scheme.

A bit of background for that as well: Back when the current road color scheme in OSM-Carto was developed there were essentially two major constraints:

  • The colors that could be used were the red-orange-yellow-white progression that had already been used for roads previously (plus the green and blue colors we wanted to stop using for roads). It was not possible to go beyond a red tone in hues since that would have led to confusion with the purple boundaries at low zoom levels.
  • The color differences between the individual classes had to be large enough to be able to reliably distinguish between them.

These constraints meant the number of distinct colors had to be reduced to five (red, dark orange, bright orange, yellow, white) and tertiary roads lost their distinct color.

With purple not being used for boundaries any more in the alternative-colors style i can lift the first constraint and extend the color palette to purple and move back to six road colors.

the road color scheme in OSM-Carto (top) and here (bottom)

Here is how this looks like practically at various zoom levels.

z14 – click for larger area

z13 – click for larger area




I also updated the low zoom rendering demo with the new road color scheme and updated data.

Update: Based on the remark by Ilya in the comments below i adjusted the color calculation script to limit the darkening of the motorway color. This makes motorways somewhat brighter than in the samples above, in particular at the lower zoom levels. You can see this in the samples in the readme and in the low zoom demo.


  1. To me motorways now look dangerously close to black railways. You can notice that on the bottom part of the Saint Petersburg map. Maybe it’s because I’ve become used to bright colors of OSM Carto, but dark roads look worse to me.

    • I see your point. This is obviously a matter of the display device and the viewing conditions to some extent.

      The current road color script uses a linear progression in both hue and lightness so to maintain the same colors for trunk-tertiary motorway has to be darker than it would be ideally. But limiting the progression in lightness at the bottom would probably be a good idea, at least for the low zoom version without casing.

    • Limiting the darkening works quite fine – see here.

      Technically this is a bit of a hack – ideally you would create a curve in Lch color space and perform constant deltaE interpolation along this curve. But that would be quite a bit of work to implement.

  2. Looks like a sensible improvement to me. Good work.

Leave a Reply to nebulon42 Cancel 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.