[OSM-talk] simplifying mapnik layout definition
Andreas Barth
aba at not.so.argh.org
Tue May 27 15:40:58 BST 2008
Hi,
currently the mapnik layout definition is a bit complex. Please consider
this example:
<Style name="tunnels-casing">
<Rule>
<Filter>([highway] = 'motorway' or [highway]='motorway_link') and ([tunnel] = 'yes' or [tunnel] ='true')</Filter>
<MaxScaleDenominator>200000</MaxScaleDenominator>
<MinScaleDenominator>100000</MinScaleDenominator>
<LineSymbolizer>
<CssParameter name="stroke">#506077</CssParameter>
<CssParameter name="stroke-width">3</CssParameter>
<CssParameter name="stroke-dasharray">4,2</CssParameter>
</LineSymbolizer>
</Rule>
<Rule>
<Filter>([highway] = 'motorway' or [highway]='motorway_link') and ([tunnel] = 'yes' or [tunnel] ='true')</Filter>
<MaxScaleDenominator>100000</MaxScaleDenominator>
<MinScaleDenominator>20000</MinScaleDenominator>
<LineSymbolizer>
<CssParameter name="stroke">#506077</CssParameter>
<CssParameter name="stroke-width">5.5</CssParameter>
<CssParameter name="stroke-dasharray">4,2</CssParameter>
</LineSymbolizer>
</Rule>
[ 2 more cases ]
The differences are only within the scales. So it would make sense to
split the scales off - and make them as small as possible. The smaller
it is, the easier one can make changes. So this could be written as:
<Style name="tunnels-casing">
<Rules filter="([highway] = 'motorway' or [highway]='motorway_link') and ([tunnel] = 'yes' or [tunnel] ='true')"/>
<CssParameter name="stroke">#506077</CssParameter>
<CssParameter name="stroke-dasharray">4,2</CssParameter>
<ScaleDenominator max="200000" min="100000">
<CssParameter name="stroke-width">3</CssParameter>
</ScaleDenominator>
<ScaleDenominator max="100000" min="20000">
<CssParameter name="stroke-width">5.5</CssParameter>
</ScaleDenominator>
</Rules>
This drops the (IMHO unnecessary) LineSymbolizer (one can make it up
from the stuff around it) and emphasizes the differences. If this looks
ok-ish, I could write an converter from the new to the old format as an
starter.
(Long-run should be to use parameters IMHO, so that we can just say
"stroke-width has that size in relation to the scale" - but that's for
another day)
Cheers,
Andi
--
http://home.arcor.de/andreas-barth/
More information about the talk
mailing list