Mapnik 中的默认样式规则

Default Style Rule in Mapnik

在 Mapnik XML 样式元素中,有什么方法可以为给定的符号设置默认值吗?在下面的示例中,我希望第一个规则是默认规则,第二个规则仅更改多边形颜色,即使用我的默认不透明度 0.5:

<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。有没有办法在不重复每个规则中的填充不透明度的情况下获得我想要的内容?

据我所知,你不能用规则来做到这一点。但是您可以使用 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>

我最初认为发生的事情和 Sergey 的回答都只是部分正确,所以我会post 在这里进行更全面的解释。

在 Mapnik 中,所有 匹配规则按匹配顺序应用(给定 filter-mode 的默认值)。我的问题和 Sergey 的回答中的示例将呈现 both 个多边形符号,一个在另一个之上。换句话说,一个规则中的符号器实际上与其他规则中的符号器无关,除了它们都堆叠在彼此之上,除非过滤器相互排斥。我想不出这种行为的用途,但这就是它的工作方式。

总结: 同一符号器的替代版本必须置于互斥规则中,并且必须明确设置所有所需选项。无法设置默认符号器并部分覆盖它。