2015-12-01 87 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