gravitystorm / openstreetmap-carto

A general-purpose OpenStreetMap mapnik style, in CartoCSS
Other
1.53k stars 821 forks source link

Request: non-intrusive subtle outline would mitigate contrast issue between forest and water #4246

Closed atorger closed 2 years ago

atorger commented 3 years ago

In places where the forest cover goes all the way up to the lake shore, or ponds inside forests, the line can be difficult to see due to similarity in brightness and color.

Many maps make a high contrast one-pixel outline to make the shapes clearer, like opentopomap.org, and although I personally think that is the best visual design in a general context, I understand that it is probably too disruptive for openstreetmap-carto which has opted for a bit more low contrast look (which has advantages too).

However, if we look at the Humanitarian or ÖPNVKarte they have a subpixel outline which is non-intrusive but does add that little bit extra clarity to the transition between forest and water, despite low color difference. I'd like to see similar rendering in openstreetmap-carto.

I've noted that in some areas I'm mapping the previous mappers have left an uncovered outline at the shore line despite that in actuality the forest cover does go all the way up to the with no visible beach from above. I think this is "tagging for the renderer", and it does make the rendered map have much more clarity with this style that has this forest/water contrast issue currently. Fixing this with a subtle outline like Humanitarian and ÖPNVKarte would reduce mappers' temptation to leave an outline when it's more correct to not do so.

Image below showing 400% enlargement of Humanitarian on top and openstreetmap-carto bottom.

image

imagico commented 3 years ago

The line you observe between adjacent polygons in the Humanitarian style and some other styles is cause by a rendering artefact inherent to AGG based renderers. See http://www.imagico.de/map/polygon_rendering.php and #1566 for background info. While this might look beneficial in case of edges between polygons of different color it is not in case of edges between polygons of the same color - see https://www.openstreetmap.org/#map=10/-4.0930/-69.7797&layers=H. And even if you think it is beneficial to have visible lines between polygons of the same fill color the AGG rendering artefacts are not a good way to do that because their appearance very much depends on the location of the edge relative to the pixel grid and is therefore highly inconsistent and confusing. We use a technique refined over the years to reduce these (which also has its drawbacks because it introduces a bias in rendering) - see for example here.

The artefacts you observe by the way do not occur in case of water line feature rendering so they do not help with visibility of river lines. You don't usually observe this in the Humanitarian style because they do not display river lines before z13.

atorger commented 3 years ago

Interesting. The suggestion solution is thus not a good idea, but the problem is still there. Is it possible to draw this or a similar line in some other way?

To be clear: the problem I note is that contrast is rather low between water and forest due to similarity in color (and forest-to-water transition is a common mapping situation). A solution would be to introduce some sort of contrast line. While a wide one could be problematic as it could be too disruptive, a subtle one seems like a good idea to me.

Another solution, which may have some technical advantages, is to change the colors such that common land covers and water is not too similar in color (focus on a brightness difference), but that would probably be way too disruptive and complicated as the effect ripples all over the style.

I was hoping there would be a simple solution to this issue...

atorger commented 3 years ago

The outline we have now on streams could work having also on waters (and rivers)? I think that could look quite nice actually, but maybe there will be a problem with lines crossing over at the stream/river openings and connected waters?

Below a screenshot showing both streams (with the outline there is today) and waters without.

image

imagico commented 3 years ago

This has all been tried and found to be either not working well or not working at all in the past. Bright halos at the lower zoom levels we experimented with extensively in context of roads and we use them now - but in a very feint variant (not comparable to that of streams). And roads in their shapes have a very different structure to that of rivers.

The halo on streams is already highly problematic because

In the ac-style i strongly reduced the halo (see http://www.imagico.de/map/pict/ac_samples/caucasus_z15.png) and consider toning it down further or removing it completely).

You are welcome to experiment with the idea and propose a specific design - but don't be surprised if it turns out to be a dead end as it has been for others who have tried it.

Outlining of water polygons does not work here because it would depend on expensive data processing to look in any way beneficial.

atorger commented 3 years ago

Thanks. If many have tried and it didn't work out, then I guess we can conclude that it's not technically possible to make outlines, at least not at this point. I'm okay with closing this issue due to that it's not feasible.

That many have tried does indicate that there are more than myself that see the lack of contrast to be an issue though, so it may be worth investigating other methods to mitigate. To me it seems like the best way forward would be to adjust the color scheme, but that is of course a much more complex thing, and I suppose you have many design goals to fulfill with the color scheme too.

jeisenbe commented 3 years ago

@atorger your suggestion is a solution to issue #1781 “Water should be better recognizable - difference to forest color too low” - but it would worsen issue #3674 "Rendering artifacts between small forest parcels at z10”

We have an alternative solution of darkening the color of linear water features (rivers, streams, canals etc) and river/canal areas in #4128 which is mentioned in issue #3896 “Rivers and canal lines and areas should be darker than other water areas”

Unfortunately, as @imagico has explained, it’s not possible to add a lighter or darker outline to water areas without generalization. Since water features are a basic ingredient in the cartography, we would need to update them frequently. Right now the oceans are only updated once a day, and this leads to new mappers sometimes converting areas of marine water (outide of the natural=coastline) to natural=water or waterway=riverbank inappropriately, to “fix” the rendering.* So there would be disadvantages to switching to pre-processed polygons for other water areas, which currently are updated quickly. Generalizing the water areas in each metatile, at the time of rendering, would be computationally expensive and would complicate the code for a small benefit.

(*Source: I did it myself, when I didn’t know better. See [waterway=tidal_channel](https://wiki.openstreetmap.org/wiki/Tag:waterway=tidal_channel) for what came of it)