要素样式

在ysld中,特征样式是一个样式块 Rules .特征样式应用于单个特征类型,并在非屏幕缓冲区中绘制。

../../../_images/feature-style.svg

要素样式元素

特征样式的目的是指定绘图顺序。 首先绘制第一个要素样式的缓冲区,然后处理第二个要素样式的缓冲区,等等。绘制完成后,缓冲区将组成最终绘制的地图。

特征样式是 top-level element 以YSLD风格。

考虑以下层次结构:

  • 功能样式1

    • 规则1a

    • 规则1b

  • 功能样式2

    • 规则2a

    • 规则2b

    • 规则2c

在这种情况下,将处理功能样式1中包含的规则及其 symbolizers 先画。处理完规则1a和1b后,渲染器将转到功能样式2,然后处理规则2a、2b和2c并绘制它们的符号。

../../../_images/feature-style-order.svg

要素样式顺序

图纸顺序

特征样式的顺序是重要的,而且特征样式中规则的顺序也是重要的。

要素样式中的规则都会同时应用于每个要素。在将要素样式中的所有规则应用于每个要素之后,下一个要素样式将再次启动,将规则应用于每个要素。

每个功能样式的屏幕外缓冲区在合成过程中合并在一起。这些缓冲区按要素样式定义的顺序合并。这样的话, using multiple feature styles is a way of specifying z-order .

考虑与上面相同的层次结构。给定一个包含三个功能的层,规则将应用如下:

功能样式1将绘制屏幕外缓冲区:

  1. 规则1a适用于第一个功能,然后是规则1b

  2. 规则1a适用于第二个功能,然后是规则1b

  3. 规则1a适用于第三个功能,然后是规则1b

../../../_images/draw-order-buffer1.svg

功能样式1缓冲区

功能样式2将绘制屏幕外缓冲区:

  1. 规则2a应用于第一个功能,然后是规则2b,然后是规则2c。

  2. 规则2a应用于第二个功能,然后是规则2b,然后是规则2c。

  3. 规则2a适用于第三个特征,接着是规则2b,然后是规则2c。

../../../_images/draw-order-buffer2.svg

功能样式2缓冲区

这张最终的地图是由以下组成部分绘制的:

  1. 绘制要素样式1的缓冲区

  2. 将绘制要素样式2的缓冲区

  3. 任何标签都画在上面

../../../_images/draw-order-map.svg

两种特征样式的组合

如果需要在其他规则之上应用规则,请使用第二种特征样式。 一个有用的例子是代表桥梁或立交桥的线路。为了确保桥接线始终显示在其他线的“顶部”(在包含的显示中,需要使用第二种特征样式应用它们)。

句法

以下是功能样式的基本语法。请注意,块的内容并非都在此处展开。

feature-styles:
- name: <text>
  title: <text>
  abstract: <text>
  transform:
    ...
  rules:
  - ...
  x-ruleEvaluation: <text>
  x-composite: <text>
  x-composite-base: <boolean>
  x-inclusion: <text>

在哪里?

财产

必修的?

描述

默认值

name

对要素样式的内部引用。建议值为 小写 并包含 没有空格 .

空白

title

功能样式的可读名称。作为包含在要素样式中的规则组的名称公开。

空白

abstract

特征样式的较长描述。

空白

transform

Rendering transformation 信息。

不适用

rules

是的

样式列表 rules .

不适用

以下属性等同于SLD“供应商选项”。

财产

必修的?

描述

默认值

x-ruleEvaluation

当等于 first -在第一次匹配后停止规则计算。通过减少功能需要遍历的规则的数量以及简化规则过滤器,可以提高渲染效率。

all

x-composite

允许缓冲区之间的alpha合成和颜色混合选项。有很多选择; see below .

不适用

x-composite-base

允许渲染引擎将该要素样式用作“基础”,并将在其上组合所有后续要素样式和图层,直到找到另一个基础。一旦构成了一个基础上的完整层集,那么该基础本身将使用其自己的合成操作符(如果存在)针对下一组合成层进行组合。这有助于微调 x-composite 并确保只合成/混合所需的内容,而不是所有绘制的内容。

false

x-inclusion

定义规则是否应包含在的样式中 legendOnlymapOnly (见 渲染选择 )

normal

合成和混合

默认情况下,绘制多个要素样式时,一个缓冲区位于另一个缓冲区之上。但是,使用 x-compositex-composite-base 选项,可以自定义缓冲区的显示方式。

以下两个表显示了 x-composite 选项。请注意,在下表中, 来源 指在顶部绘制的缓冲区,而 目的地 引用源在其上绘制的缓冲区。

阿尔法通道

alpha合成控制如何使用每个缓冲区的透明区域合并缓冲区。

价值

描述

copy

只有源才会出现在输出中。

../../../_images/composite-source.svg

destination

输出中只存在目标。

../../../_images/composite-destination.svg

source-over

源是在目标上绘制的,在源是透明的情况下,目标是可见的。与…相反 destination-over .这是x-composite的默认值。

../../../_images/composite-source-over.svg

destination-over

源绘制在目标的下方,并且仅当目标是透明的时才可见。与…相反 source-over .

../../../_images/composite-destination-over.svg

source-in

只有当目标的某些非透明像素重叠时,源才可见。这允许背景地图作为正在绘制的图层/特征的遮罩。与…相反 destination-in .

../../../_images/composite-source-in.svg

destination-in

只有当源中的某些不透明像素重叠时,才会保留目标。这允许绘制层/特征作为背景地图的遮罩。与…相反 source-in .

../../../_images/composite-destination-in.svg

source-out

源只保留在目标是透明的区域中。当与 source-in .

../../../_images/composite-source-out.svg

destination-out

目标仅保留在源是透明的区域中。当与 destination-in .

../../../_images/composite-destination-out.svg

source-atop

目标完全绘制,而源仅在与目标相交的位置绘制。

../../../_images/composite-source-atop.svg

destination-atop

源是完全绘制的,而目标仅在源与源相交的位置绘制。

../../../_images/composite-destination-atop.svg

xor

“独占或”模式。只有当源或目标不为空,但不是同时为空时,才会渲染每个像素。

../../../_images/composite-xor.svg

颜色混合

颜色混合允许在合成过程中混合缓冲区。

价值

描述

multiply

源颜色乘以目标颜色并替换目标。生成的颜色始终至少与源颜色或目标颜色一样暗。任何颜色与黑色相乘都会导致黑色。将任何颜色与白色相乘将保留原始颜色。

../../../_images/blend-multiply.png

screen

将源颜色值和目标颜色值的互补值相乘,然后对结果进行互补。最终结果颜色始终至少与两种组分颜色中的任何一种一样轻。用白色屏蔽任何颜色都会产生白色;用黑色屏蔽使原始颜色保持不变。

../../../_images/blend-screen.png

overlay

根据目标颜色值乘以颜色。源颜色覆盖目标,同时保留高光和阴影。背景色不会被替换,而是与源颜色混合以反映背景的明暗度。

../../../_images/blend-overlay.png

darken

选择目标颜色和源颜色中较深的颜色。仅当源较暗时,才会将目标替换为源。

../../../_images/blend-darken.png

lighten

选择目标颜色和源颜色的浅色。仅当震源较轻时,才会用震源替换目的地。

../../../_images/blend-lighten.png

color-dodge

使目标颜色变亮以反映源颜色。用黑色绘制不会产生任何更改。

../../../_images/blend-color-dodge.png

color-burn

使目标颜色变暗以反映源颜色。用白色绘制不会产生变化。

../../../_images/blend-color-burn.png

hard-light

根据源颜色值倍增颜色。这种效果类似于对目的地发出刺眼的聚光灯。

../../../_images/blend-hard-light.png

soft-light

根据源颜色值变暗或变亮颜色。效果类似于目标上的漫射聚光灯。

../../../_images/blend-soft-light.png

difference

从较浅的颜色中减去两种组分颜色中较深的颜色。白色反转目标颜色;黑色不产生变化。

../../../_images/blend-difference.png

exclusion

产生类似于差异的效果,但对比度较低。白色反转目标颜色;黑色不产生变化。

../../../_images/blend-difference.png

备注

有关合成和混合选项的详细信息,请参见 GeoServer User Manual .

短语法

当一个样式只有一个特征样式时,可以省略该特征样式的语法并从内部的第一个参数开始。

因此,以下完整样式都是等效的:

feature-styles:
- rules:
  - name: rule1
    scale: [min,50000]
    symbolizers:
    - line:
        stroke-color: '#000000'
        stroke-width: 2
  - name: rule2
    scale: [50000,max]
    symbolizers:
    - line:
        stroke-color: '#000000'
        stroke-width: 1
rules:
- name: rule1
  scale: [min,50000]
  symbolizers:
  - line:
      stroke-color: '#000000'
      stroke-width: 2
- name: rule2
  scale: [50000,max]
  symbolizers:
  - line:
      stroke-color: '#000000'
      stroke-width: 1

实例

道路套管

此示例显示如何在较大的线的顶部绘制较小的线,从而产生使用边框或“套管”绘制线的效果:

feature-styles:
- name: outer
  title: Outer line
  rules:
  - name: outer_rule
    symbolizers:
    - line:
        stroke-color: '#808080'
        stroke-width: 8
- name: inner
  title: Inner line
  rules:
  - name: inner_rule
    symbolizers:
    - line:
        stroke-color: '#44FF88'
        stroke-width: 6

要始终在外部线条的顶部绘制内部线条,我们需要控制 z-order . 这个 outer_rule 以其自身的特征样式封装,并绘制成一个独特的“外线”缓冲区。下一个 inner_rule 以其自身的特征样式封装,并绘制成一个独特的“内部行”缓冲区。

../../../_images/line-casing-buffers.svg

要素样式缓冲区

在合成过程中,这两个屏幕外缓冲区将合并到最终贴图中。

../../../_images/line-casing-map.svg

最终地图组成

绘制时,外线宽度为8像素,内线宽度为6像素,因此“边框”线为1像素(每侧)。

../../../_images/fs_roadcasing.png

显示道路套管的示例

第一场比赛

如果一种风格有许多规则,并且结果都很明显,那么采用这种风格可能会比较有利。 x-ruleEvaluation: first 从而提高渲染效率,简化规则。

第一个示例展示了为数据集创建规则的标准方法。有村庄、城镇和城市 (type = 'village'type = 'town'type = 'city' )他们有一个 industry 可能是 fishing 或其他值。

备注

为了简化这个例子,点符号的细节被替换为 定义和重用YAML变量 .在一个真实的例子中,这些也需要在ysld中定义。

 1feature-styles:
 2- name: without_first_match
 3  rules:
 4  - name: fishing_town
 5    filter: ${type = 'town' AND industry = 'fishing'}
 6    symbolizers:
 7    - point:
 8        <<: *fishingtown
 9  - name: fishing_city
10    filter: ${type = 'city' AND industry = 'fishing'}
11    symbolizers:
12    - point:
13        <<: *fishingcity
14  - name: other_towns_cities
15    filter: ${type IN ('town', 'city') AND industry <> 'fishing'}
16    symbolizers:
17    - point:
18        <<: *othertownscities
19  - name: other
20    else: true
21    symbolizers:
22    - point:
23        <<: *allotherplaces

使用 x-ruleEvaluation: first 参数,样式简化:

 1feature-styles:
 2- name: with_first_match
 3  x-ruleEvaluation: first
 4  rules:
 5  - name: fishing_town
 6    filter: ${type = 'town' AND industry = 'fishing'}
 7    symbolizers:
 8    - point:
 9        <<: *fishingtown
10  - name: fishing_city
11    filter: ${type = 'city' AND industry = 'fishing'}
12    symbolizers:
13    - point:
14        <<: *fishingcity
15  - name: other_towns_cities
16    filter: ${type IN ('town', 'city')}
17    symbolizers:
18    - point:
19        <<: *othertownscities
20  - name: other
21    else: true
22    symbolizers:
23    - point:
24        <<: *allotherplaces

具体来说,第三条规则不再需要额外的 AND industry <> 'fishing' ,因为前两个规则意味着该规则所保留的任何特性都具有该条件。

层掩码

如果有两层(在本例中是两层三波段栅格),一层可以屏蔽或“击倒”另一层,使其下方可见。

../../../_images/fs_land.png

顶层/源层

../../../_images/fs_ocean.png

底层/目的层

备注

截图显示数据提供者 Natural Earth .

第1层(顶部/来源):

1feature-styles:
2- rules:
3  - title: Top/source
4    symbolizers:
5    - raster:
6        opacity: 1.0
7  x-composite: xor

第2层(底部/目的地):

1feature-styles:
2- rules:
3  - title: Bottom/destination
4    symbolizers:
5    - raster:
6        opacity: 1.0
../../../_images/fs_xor.png

图层为遮罩

颜色反转

对于与前一个示例相同的两个图层,可以显示图层颜色的差异,这会产生颜色“反转”的效果。

第1层(顶部/来源):

1feature-styles:
2- rules:
3  - title: Top/source
4    symbolizers:
5    - raster:
6        opacity: 1.0
7  x-composite: difference

第2层(底部/目的地):

1feature-styles:
2- rules:
3  - title: Bottom/destination
4    symbolizers:
5    - raster:
6        opacity: 1.0
../../../_images/fs_difference.png

颜色反转层

Previous: 结构
Next: 规则