[Mapcss] Nesting Selectors

Thomas Davie tom.davie at gmail.com
Sat Apr 28 00:53:27 BST 2012

Warning: not very CSS like proposal coming up!

I've recently been toying with how to optimise OpenStreetPad's stylesheet code, and found that a large gain could be found by supporting the exit; statement in MapCSS, and allowing lots of checking to be omitted by stopping checking rules after a certain one had matched.  This has made OSP about 20 times faster at styling using its default style sheet.

However... I want to go further.  A second way to be able to omit checks, and to add more expressivity to the language, would be to allow nesting of MapCSS selectors like this:

> way[highway]
> {
>   width: 8pt;
>   color: rgb(1.0, 1.0, 1.0);
>   casing-width: 1pt;
>   casing-color: rgb(0.5, 0.5, 0.5);
>   z-index: 100;
>   text-position: line;
>   font-family: Helvetica;
>   font-size: 12pt;
>   text-color: black;
>   text-offset: 6;
>   text-halo-radius: 2pt;
>   text-halo-color: white;
>   way|z16-[highway],
>   way|z12-[highway="motorway"],
>   way|z14-[highway="trunk"],
>   way|z15-[highway="primary"]
>   {
>     text: tag("name");
>   }
>   way[highway="motorway"],
>   way[highway="motorway_link"]
>   {
>     width: 16pt;
>     z-index: 100.5;
>     color: rgb(0.745 , 0.784, 1.0);
>     font-size: 14pt;
>   }
>   exit;
> }

This would allow an object to be checked for the existence of a highway tag (for example) exactly once, but still allow fine grained control over how each different highway= value should be rendered.  More so, it allows the user to add details (like for example, access=no highways rendering with red dots on them) to the way of that type much more easily, as they can simply add a nested selector inside the highway selector.

Before I ran off and implemented this, I wanted to run it past everyone – is this viable?


Tom Davie

More information about the Mapcss mailing list