2015-12-01 89 views
1

在Mapnik XML样式元素中,是否有任何方法为给定的符号器设置默认值?在下面的例子中,我想第一个规则是默认和第二只改变多边形的颜色,即,用我的0.5默认不透明度:Mapnik中的默认样式规则

<Style name="MyStyle"> 
    <Rule> 
    <PolygonSymbolizer fill="gray" fill-opacity="0.5"/> 
    </Rule> 
    <Rule> 
    <Filter>([some_field] &lt; 2)</Filter> 
    <PolygonSymbolizer fill="red"/> 
    </Rule> 
</Style> 

实际发生的是,具有符合过滤转红色并将其不透明度设置为1.是否有任何方法可以在不重复每个规则中的填充不透明度的情况下获得我想要的内容?

回答

1

两个我原本以为发生了什么和谢尔盖的回答只有部分正确的,所以我会在这里发布一个更全面的解释。

在Mapnik,全部匹配规则适用于匹配的顺序(给定filter-mode的默认值)。在我的问题和谢尔盖的答案中的例子将渲染多边形符号,一个在另一个之上。换句话说,一个规则中的符号器与其他规则中的符号器实际上没有任何关系,只是它们都堆叠在一起,除非滤波器互斥。我无法想到这种行为的用途,但这似乎是工作。

摘要:同一个符号发生器的替代版本必须放置在相互排斥的规则中,并且必须显式设置所有需要的选项。没有办法设置默认的符号并部分覆盖它。

1

据我所知,你不能用规则来做到这一点。但是你可以使用rgba颜色来填充不透明的多边形。

试试这个:

<Style name="MyStyle"> 
    <Rule> 
    <PolygonSymbolizer fill="rgba(204, 204, 204, 0.5)" /> 
    </Rule> 
    <Rule> 
    <Filter>([some_field] &lt; 2)</Filter> 
    <PolygonSymbolizer fill="rgba(255, 0, 0, 0.5)" /> 
    </Rule> 
</Style> 
+0

感谢您的支持。发现它在语法上更接近我想要的,但是,就像在我自己​​的例子中那样,最终绘制了两个符号器,一个在另一个之上(参见下面的答案)。在这种情况下,红色不会只是红色 - 它会与第一条规则下面的灰色混合成红色。 – jchamberlain