Правило стиля по умолчанию в Mapnik

Есть ли способ установить значения по умолчанию для данного символизатора в элементе Mapnik XML Style? В следующем примере я хочу, чтобы первое правило использовалось по умолчанию, а второе изменяло только цвет многоугольника, т. е. использовало непрозрачность по умолчанию 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. Есть ли способ получить то, что я хочу, не повторяя непрозрачность заливки в каждом правиле?


person jchamberlain    schedule 01.12.2015    source источник


Ответы (2)


Насколько я знаю, вы не можете сделать это с помощью правил. Но вы можете использовать цвета 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>
person Sergey Bobrovskikh    schedule 04.12.2015
comment
Спасибо за это. Оказывается, это синтаксически ближе к тому, что я хочу, но, как и в моем собственном примере, в конечном итоге рисуются оба символизатора, один поверх другого (см. Ответ ниже). Красный цвет в этом случае будет не просто красным — он будет красным, смешанным с серым под ним из первого правила. - person jchamberlain; 10.12.2015

И то, что я изначально думал, и ответ Сергея верны лишь частично, поэтому я опубликую здесь более полное объяснение.

В Mapnik все правила сопоставления применяются в порядке совпадения (с учетом значения по умолчанию для filter-mode). Примеры в моем вопросе и ответе Сергея будут отображать оба символизатора многоугольника, один поверх другого. Другими словами, символизатор в одном правиле на самом деле не имеет ничего общего с символизатором в других правилах, за исключением того, что все они накладываются друг на друга, если только фильтры не являются взаимоисключающими. Я не могу придумать, как использовать это поведение, но похоже, что оно работает именно так.

Вывод: альтернативные версии одного и того же символизатора должны быть помещены во взаимоисключающие правила и должны явно устанавливать все желаемые параметры. Невозможно установить символизатор по умолчанию и частично переопределить его.

person jchamberlain    schedule 10.12.2015