要素样式¶
在ysld中,特征样式是一个样式块 Rules .特征样式应用于单个特征类型,并在非屏幕缓冲区中绘制。
要素样式元素¶
特征样式的目的是指定绘图顺序。 首先绘制第一个要素样式的缓冲区,然后处理第二个要素样式的缓冲区,等等。绘制完成后,缓冲区将组成最终绘制的地图。
特征样式是 top-level element 以YSLD风格。
考虑以下层次结构:
功能样式1
规则1a
规则1b
功能样式2
规则2a
规则2b
规则2c
在这种情况下,将处理功能样式1中包含的规则及其 symbolizers 先画。处理完规则1a和1b后,渲染器将转到功能样式2,然后处理规则2a、2b和2c并绘制它们的符号。
要素样式顺序¶
图纸顺序¶
特征样式的顺序是重要的,而且特征样式中规则的顺序也是重要的。
要素样式中的规则都会同时应用于每个要素。在将要素样式中的所有规则应用于每个要素之后,下一个要素样式将再次启动,将规则应用于每个要素。
每个功能样式的屏幕外缓冲区在合成过程中合并在一起。这些缓冲区按要素样式定义的顺序合并。这样的话, using multiple feature styles is a way of specifying z-order .
考虑与上面相同的层次结构。给定一个包含三个功能的层,规则将应用如下:
功能样式1将绘制屏幕外缓冲区:
规则1a适用于第一个功能,然后是规则1b
规则1a适用于第二个功能,然后是规则1b
规则1a适用于第三个功能,然后是规则1b
功能样式1缓冲区¶
功能样式2将绘制屏幕外缓冲区:
规则2a应用于第一个功能,然后是规则2b,然后是规则2c。
规则2a应用于第二个功能,然后是规则2b,然后是规则2c。
规则2a适用于第三个特征,接着是规则2b,然后是规则2c。
功能样式2缓冲区¶
这张最终的地图是由以下组成部分绘制的:
绘制要素样式1的缓冲区
将绘制要素样式2的缓冲区
任何标签都画在上面
两种特征样式的组合¶
如果需要在其他规则之上应用规则,请使用第二种特征样式。 一个有用的例子是代表桥梁或立交桥的线路。为了确保桥接线始终显示在其他线的“顶部”(在包含的显示中,需要使用第二种特征样式应用它们)。
句法¶
以下是功能样式的基本语法。请注意,块的内容并非都在此处展开。
feature-styles:
- name: <text>
title: <text>
abstract: <text>
transform:
...
rules:
- ...
x-ruleEvaluation: <text>
x-composite: <text>
x-composite-base: <boolean>
x-inclusion: <text>
在哪里?
财产 |
必修的? |
描述 |
默认值 |
---|---|---|---|
|
不 |
对要素样式的内部引用。建议值为 小写 并包含 没有空格 . |
空白 |
|
不 |
功能样式的可读名称。作为包含在要素样式中的规则组的名称公开。 |
空白 |
|
不 |
特征样式的较长描述。 |
空白 |
|
不 |
不适用 |
|
|
是的 |
样式列表 rules . |
不适用 |
以下属性等同于SLD“供应商选项”。
财产 |
必修的? |
描述 |
默认值 |
---|---|---|---|
|
不 |
当等于 |
|
|
不 |
允许缓冲区之间的alpha合成和颜色混合选项。有很多选择; see below . |
不适用 |
|
不 |
允许渲染引擎将该要素样式用作“基础”,并将在其上组合所有后续要素样式和图层,直到找到另一个基础。一旦构成了一个基础上的完整层集,那么该基础本身将使用其自己的合成操作符(如果存在)针对下一组合成层进行组合。这有助于微调 |
|
|
不 |
定义规则是否应包含在的样式中 |
|
合成和混合¶
默认情况下,绘制多个要素样式时,一个缓冲区位于另一个缓冲区之上。但是,使用 x-composite
和 x-composite-base
选项,可以自定义缓冲区的显示方式。
以下两个表显示了 x-composite
选项。请注意,在下表中, 来源 指在顶部绘制的缓冲区,而 目的地 引用源在其上绘制的缓冲区。
阿尔法通道
alpha合成控制如何使用每个缓冲区的透明区域合并缓冲区。
价值 |
描述 |
---|---|
|
只有源才会出现在输出中。 |
|
输出中只存在目标。 |
|
源是在目标上绘制的,在源是透明的情况下,目标是可见的。与…相反 |
|
源绘制在目标的下方,并且仅当目标是透明的时才可见。与…相反 |
|
只有当目标的某些非透明像素重叠时,源才可见。这允许背景地图作为正在绘制的图层/特征的遮罩。与…相反 |
|
只有当源中的某些不透明像素重叠时,才会保留目标。这允许绘制层/特征作为背景地图的遮罩。与…相反 |
|
源只保留在目标是透明的区域中。当与 |
|
目标仅保留在源是透明的区域中。当与 |
|
目标完全绘制,而源仅在与目标相交的位置绘制。 |
|
源是完全绘制的,而目标仅在源与源相交的位置绘制。 |
|
“独占或”模式。只有当源或目标不为空,但不是同时为空时,才会渲染每个像素。 |
颜色混合
颜色混合允许在合成过程中混合缓冲区。
价值 |
描述 |
---|---|
|
源颜色乘以目标颜色并替换目标。生成的颜色始终至少与源颜色或目标颜色一样暗。任何颜色与黑色相乘都会导致黑色。将任何颜色与白色相乘将保留原始颜色。 ![]() |
|
将源颜色值和目标颜色值的互补值相乘,然后对结果进行互补。最终结果颜色始终至少与两种组分颜色中的任何一种一样轻。用白色屏蔽任何颜色都会产生白色;用黑色屏蔽使原始颜色保持不变。 ![]() |
|
根据目标颜色值乘以颜色。源颜色覆盖目标,同时保留高光和阴影。背景色不会被替换,而是与源颜色混合以反映背景的明暗度。 ![]() |
|
选择目标颜色和源颜色中较深的颜色。仅当源较暗时,才会将目标替换为源。 ![]() |
|
选择目标颜色和源颜色的浅色。仅当震源较轻时,才会用震源替换目的地。 ![]() |
|
使目标颜色变亮以反映源颜色。用黑色绘制不会产生任何更改。 ![]() |
|
使目标颜色变暗以反映源颜色。用白色绘制不会产生变化。 ![]() |
|
根据源颜色值倍增颜色。这种效果类似于对目的地发出刺眼的聚光灯。 ![]() |
|
根据源颜色值变暗或变亮颜色。效果类似于目标上的漫射聚光灯。 ![]() |
|
从较浅的颜色中减去两种组分颜色中较深的颜色。白色反转目标颜色;黑色不产生变化。 ![]() |
|
产生类似于差异的效果,但对比度较低。白色反转目标颜色;黑色不产生变化。 ![]() |
备注
有关合成和混合选项的详细信息,请参见 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
以其自身的特征样式封装,并绘制成一个独特的“内部行”缓冲区。
要素样式缓冲区¶
在合成过程中,这两个屏幕外缓冲区将合并到最终贴图中。
最终地图组成¶
绘制时,外线宽度为8像素,内线宽度为6像素,因此“边框”线为1像素(每侧)。

显示道路套管的示例¶
第一场比赛¶
如果一种风格有许多规则,并且结果都很明显,那么采用这种风格可能会比较有利。 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'
,因为前两个规则意味着该规则所保留的任何特性都具有该条件。
层掩码¶
如果有两层(在本例中是两层三波段栅格),一层可以屏蔽或“击倒”另一层,使其下方可见。

顶层/源层¶

底层/目的层¶
备注
截图显示数据提供者 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

图层为遮罩¶
颜色反转¶
对于与前一个示例相同的两个图层,可以显示图层颜色的差异,这会产生颜色“反转”的效果。
第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

颜色反转层¶