线¶
虽然线条看起来也可以是简单的形状,有长度但没有宽度,但是有许多选项和技巧可以使线条显示得很好。
线条层示例¶
这个 lines layer
下面的例子中使用的是一个虚构国家的道路信息。作为参考,下面包含了该层中点的属性表。
|
|
|
---|---|---|
line.1 |
人行道 |
公路 |
line.2 |
新月大道 |
第二的 |
line.3 |
森林大道 |
第二的 |
line.4 |
长路 |
公路 |
line.5 |
萨克森大街 |
第二的 |
line.6 |
里奇大街 |
第二的 |
line.7 |
霍利巷 |
地方公路 |
line.8 |
桑树街 |
地方公路 |
line.9 |
内森巷 |
地方公路 |
line.10 |
中央大街 |
地方公路 |
line.11 |
洛伊斯巷 |
地方公路 |
line.12 |
洛基路 |
地方公路 |
line.13 |
舰队街 |
地方公路 |
line.14 |
黛安娜法院 |
地方公路 |
line.15 |
雪松小径 |
地方公路 |
line.16 |
胜利之路 |
地方公路 |
line.17 |
高原路 |
地方公路 |
line.18 |
安逸街 |
地方公路 |
line.19 |
希尔街 |
地方公路 |
line.20 |
乡村公路 |
地方公路 |
line.21 |
主要街道 |
地方公路 |
line.22 |
贾尼·蓝道 |
地方公路 |
line.23 |
胫骨巷 |
地方公路 |
line.24 |
州街道 |
地方公路 |
line.25 |
河道 |
地方公路 |
简单线条¶
此示例指定线条为黑色,粗细为3像素。

简单线条¶
代码¶
Download the "Simple line" YSLD
title: 'YSLD Cook Book: Simple Line'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#000000'
stroke-width: 3
细节¶
对于这个ysld,在一个特性样式中有一个规则,这是最简单的可能情况。(除非另有规定,否则所有后续示例将包含一个规则和一个功能样式。)样式线通过线条符号完成。( lines 5-8 ) 第7行 指定线条的颜色为黑色 ('#000000'
) 第8行 指定线条宽度为3像素。
带边框的线条¶
此示例演示如何绘制带边框的线条(有时称为“cased lines”)。在这种情况下,线条以3像素的蓝色中心和1像素宽的灰色边框绘制。

带边框的线条¶
代码¶
Download the "Line with border" YSLD
title: 'YSLD Cook Book: Line with border'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#333333'
stroke-width: 5
stroke-linecap: round
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#6699FF'
stroke-width: 3
stroke-linecap: round
细节¶
ysld中的行没有“填充”的概念,只有“笔画”。因此,与点或多边形不同,不可能为线几何体的“边”设置样式。但是,可以通过绘制每行两次来达到这种效果:一次以一定的宽度绘制,另一次以较小的宽度绘制。这给了填充和笔画的错觉,除了沿着小线条的边缘之外,其他地方的大线条都被遮住了。
由于每行绘制两次,渲染的顺序是 very 重要。地理服务器渲染 feature-styles
按照它们在YSLD中显示的顺序。在此样式中,首先通过第一个要素样式绘制灰色边框线,然后在第二个要素样式中绘制蓝色中心线。这样可以确保蓝线不会被灰色线遮挡,也可以确保在交叉点处正确渲染,从而使蓝线“连接”。
在这个例子中, lines 3-9 包含第一个特征样式,即外线(或“笔画”)。 第7行 指定线条的颜色为深灰色 ('#333333'
) 第8行 将此行的宽度指定为5像素,并以 第9行 一 stroke-linecap
参数 round
将线条的两端呈现为圆形而不是平面。(使用圆线帽处理边框线时,确保边框在线条末端正确连接。)
Lines 10-16 包括第二个 feature-style
,它是内线(或“填充”)。 Line 14 将线条的颜色指定为中蓝色 ('#6699FF'
), line 15 将此线的宽度指定为3个像素,并 line 16 再次将线条的边缘渲染为圆角而不是平坦。
结果是3像素蓝线和1像素灰色边框,因为5像素灰线将在3像素蓝线的每侧显示1像素。
虚线¶
这个例子改变了 简单线条 创建一条由5个像素的绘制线和2个像素的空格交替组成的虚线。

虚线¶
代码¶
Download the "Dashed line" YSLD
title: 'YSLD Cook Book: Dashed line'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#0000FF'
stroke-width: 3
stroke-dasharray: 5 2
细节¶
在这个例子中, 第8行 将线条的颜色设置为蓝色 ('#0000FF'
) 第8行 将线条宽度设置为3像素。 第9行 确定线条短划线的组成。价值 5 2
创建一个5像素绘制线条的重复图案,后跟2像素省略线条。
偏移线¶
这个例子改变了 简单线条 在直线左侧添加一条垂直偏移线,距离为5像素。

虚线¶
代码¶
Download the "Offset line" YSLD
title: 'YSLD Cook Book: Dashed line'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#000000'
stroke-width: 2
- line:
stroke-color: '#0000FF'
stroke-width: 3
stroke-dasharray: 5 2
offset: 3
细节¶
在这个例子中, lines 6-8 画一条简单的黑线,就像在简单线示例中那样。 Lines 9-12 绘制一条蓝色虚线,如上面的虚线示例所示。 第13行 修改从线条几何体偏移3像素的虚线。
铁路(孵化)¶
此示例使用图案填充创建铁路样式。线条和图案填充均为黑色,主线的厚度为2像素,垂直图案填充的宽度为1像素。

铁路(孵化)¶
代码¶
Download the "Railroad (hatching)" YSLD
title: 'YSLD Cook Book: Railroad (hatching)'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#333333'
stroke-width: 3
- line:
stroke-color: '#333333'
stroke-width: 1
stroke-graphic:
size: 12
symbols:
- mark:
shape: shape://vertline
stroke-color: '#333333'
stroke-width: 1
细节¶
在这个例子中有两个线符号。第一个符号,在 lines 6-8 ,绘制标准线,使用 第7行 把线条画成深灰色 ('#333333'
) 第8行 将线条宽度设置为2像素。
图案填充在第二个符号中调用,打开 lines 9-18 . 第16行 指定符号绘制竖线图案填充 (shape://vertline
)垂直于线条几何。 Lines 17-18 将图案填充颜色设置为深灰色 ('#333333'
)宽度为1像素。最后, 第13行 指定图案填充的长度和每个图案填充之间的距离均为12像素。
间隔图形符号¶
本例使用图形笔画和短划线数组创建“点和空间”线条类型。添加破折号数组规范允许控制一个符号和下一个符号之间的空间量。如果不使用破折号数组,线条将密集地填充点,每个点都与前一个点接触。

沿直线的间隔符号¶
代码¶
Download the "Spaced symbols" YSLD
name: Default Styler
title: 'YSLD Cook Book: Dash/Space line'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#333333'
stroke-width: 1
stroke-dasharray: 4 6
stroke-graphic:
size: 4
symbols:
- mark:
shape: circle
stroke-color: '#333333'
stroke-width: 1
fill-color: '#666666'
细节¶
与前面的其他示例一样,此示例使用 stroke-graphic
沿线放置图形符号。符号,在上定义 lines 14-18 是一个带有深灰色轮廓的4像素灰色圆圈。符号之间的间距由 stroke-dasharray
在… line 9 ,它指定4个像素的落笔(刚好足以画出圆圈)和6个像素的抬笔,以提供间距。
带短划线偏移的交替符号¶
此示例演示如何创建交替使用虚线和图形符号的复杂线条样式。代码建立在前面示例中所示的功能之上:
stroke-dasharray
控制向下/向上打开行为以生成虚线
stroke-graphic
沿线放置符号结合这两者可以控制符号间距
这还显示了 dash offset ,它控制在破折号数组中开始渲染的位置。例如,使用破折号数组 5 10
短划线偏移量为 7
渲染器从开始绘制7个像素的图案。它跳过5个像素的“笔下”部分和2个像素的“笔上”部分,然后向上绘制剩余的8个像素,然后向下绘制5个像素,向上绘制10个像素,依此类推。
该示例演示如何使用这些功能创建两个同步的短划线数组序列,一个绘制线段和其他符号。

交替短划线和符号¶
代码¶
Download the "Spaced symbols" YSLD
title: 'YSLD Cook Book: Dash/Symbol line'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#0000FF'
stroke-width: 1
stroke-dasharray: 10 10
- line:
stroke-color: '#000033'
stroke-width: 1
stroke-dasharray: 5 15
stroke-dashoffset: 7.5
stroke-graphic:
size: 5
symbols:
- mark:
shape: circle
stroke-color: '#000033'
stroke-width: 1
细节¶
在本例中,两个线符号使用 stroke-dasharray
以及不同的符号学来产生一系列交替的破折号和符号。第一个符号( lines 6-9 )是一条简单的虚线,用10个像素的笔向下替换10个像素的笔向上。第二个符号( lines 10-21 )将5像素的空圆替换为15像素的空白。圆符号由 mark
元素,其符号由指定 stroke
参数( lines 20-21 )。符号之间的间距由 stroke-dasharray
( 第13行 ,它指定5个像素的笔向下(刚好足以绘制圆)和15个像素的笔向上。为了使两个序列正确定位,第二个序列使用 stroke-dashoffset
第7.5页( 第14行 )。这使得序列从12.5像素的空白开始,然后是一个圆(然后在另一个图案的两个线段之间居中),然后是15像素的空白,依此类推。
带默认标签的行¶
此示例在简单行上显示文本标签。这是在没有任何其他自定义的情况下标签的显示方式。

带默认标签的行¶
代码¶
Download the "Line with default label" YSLD
name: Default Styler
title: 'YSLD Cook Book: Line with default label'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#FF0000'
stroke-width: 1
- text:
label: ${name}
fill-color: '#000000'
font-family: Serif
font-size: 10
font-style: normal
font-weight: normal
placement: point
细节¶
在这个例子中,有一个规则有一个线符号和一个文本符号。线条符号( lines 6-8 )绘制红线 ('#FF0000'
)。文本符号( lines 10-17 )确定线条的标签。 Line 10 指定标签的文本将由每行的“name”属性值确定。(请参阅中的属性表 线条层示例 如有必要,请参见第节。) Line 11 将文本颜色设置为黑色。关于标签的所有其他细节都设置为渲染器默认值,这里是Times New Roman字体,字体颜色为黑色,字体大小为10像素。
标签后一行¶
此示例呈现文本标签,使其跟随线条的轮廓。

标签后一行¶
代码¶
Download the "Label following line" YSLD
title: 'YSLD Cook Book: Label following line'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#FF0000'
stroke-width: 1
- text:
label: ${name}
fill-color: '#000000'
placement: line
offset: 0
x-followLine: true
细节¶
作为 带短划线偏移的交替符号 示例显示,默认标签行为不是最佳的。标签显示在与线条本身相切的位置,导致不确定哪个标签对应于哪个线条。
此示例与 带短划线偏移的交替符号 示例,但不包括 lines 12-14 . 第14行 设置选项使标签跟随行,同时 lines 12-13 指定标签沿直线放置。如果 placement: line
在ysld中未指定,则 placement: point
假设,这与特定于行的渲染选项不兼容。
备注
由于标签冲突解决,并非所有标签都显示。参见下一节 优化标签放置 例如如何最大化标签显示。
优化标签放置¶
此示例优化了行的标签放置,以便显示最大数量的标签。

优化标签¶
代码¶
Download the "Optimized label" YSLD
title: 'YSLD Cook Book: Optimized label placement'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#FF0000'
stroke-width: 1
- text:
label: ${name}
fill-color: '#000000'
placement: line
offset: 0
x-followLine: true
x-maxAngleDelta: 90
x-maxDisplacement: 400
x-repeat: 150
细节¶
geoserver使用“冲突解决”来确保标签不会绘制在其他标签之上,从而使它们都变得模糊。这就解释了为什么在前面的示例中许多行没有标签, 标签后一行 .虽然可以切换此设置,但通常最好将其保留在打开状态,并使用其他标签放置选项以确保根据需要在正确的位置绘制标签。这个例子就是这样做的。
此示例与前一个示例类似, 标签后一行 .唯一的区别在于 lines 15-17 . 第15行 设置标签将遵循的最大角度。这会将标签设置为从不弯曲超过90度,以防止标签因明显的曲线或角度而变得难以辨认。 第16行 将标签的最大位移设置为400像素。为了解决与重叠标签的冲突,GeoServer将尝试移动标签,使它们不再重叠。此值设置标签相对于其原始位置的移动距离。最后, 第17行 将标签设置为每150像素重复一次。一个特性通常只接收一个标签,但这可能会导致长行混淆。将标签设置为重复可确保始终在本地标记行。
优化风格标签¶
此示例改进了 优化标签放置 例子。

优化风格标签¶
代码¶
Download the "Optimized and styled label" YSLD
title: 'YSLD Cook Book: Optimized and styled label'
feature-styles:
- name: name
rules:
- symbolizers:
- line:
stroke-color: '#FF0000'
stroke-width: 1
- text:
label: ${name}
fill-color: '#000000'
font-family: Arial
font-size: 10
font-style: normal
font-weight: bold
placement: line
offset: 0
x-followLine: true
x-maxAngleDelta: 90
x-maxDisplacement: 400
x-repeat: 150
细节¶
此示例与 优化标签放置 .唯一的区别是字体信息,它包含在 lines 12-15 . 第12行 将字体系列设置为“Arial”, 第13行 将字体大小设置为10, 第14行 将字体样式设置为“普通”(与“斜体”或“斜体”相反),以及 第15行 将字体粗细设置为“粗体”(而不是“普通”)。
基于属性的线条¶
此示例根据“类型”(道路类别)属性对线进行不同的样式设置。

基于属性的线条¶
代码¶
Download the "Attribute-based line" YSLD
title: 'YSLD Cook Book: Attribute-based line'
feature-styles:
- name: name
rules:
- name: local-road
filter: ${type = 'local-road'}
symbolizers:
- line:
stroke-color: '#009933'
stroke-width: 2
- name: name
rules:
- name: secondary
filter: ${type = 'secondary'}
symbolizers:
- line:
stroke-color: '#0055CC'
stroke-width: 3
- name: name
rules:
- name: highway
filter: ${type = 'highway'}
symbolizers:
- line:
stroke-color: '#FF0000'
stroke-width: 6
细节¶
在我们虚构的国家里,有三种道路等级,从主干道到高速高速公路:“公路”、“二级公路”和“地方公路”。为了分别处理每个案例,有多个特征样式,每个样式包含一个规则。这样可以确保按顺序渲染每个道路类型,因为每个特征样式都是根据其在YSLD中的显示顺序绘制的。
三条规则设计如下:
规则顺序 |
规则名称/类型 |
颜色 |
尺寸 |
---|---|---|---|
1 |
地方公路 |
|
2 |
2 |
第二的 |
|
3 |
3 |
公路 |
|
6 |
Lines 3-10 构成第一条规则。 第6行 设置此规则的筛选器,使“type”属性的值为“local road”。如果此条件适用于特定行,则规则将根据位于 lines 8-10 . Lines 9-10 将线条的颜色设置为深绿色 ('#009933'
)宽度为2像素。
Lines 11-18 构成第二条规则。 第14行 设置此规则的筛选器,使“type”属性的值为“secondary”。如果此条件适用于特定行,则规则将根据位于 lines 16-18 . Lines 17-18 将线条的颜色设置为深蓝色 ('#0055CC'
)宽度为3个像素,使线条略厚于“本地道路”线条,颜色也有所不同。
Lines 19-26 构成第三条和最后一条规则。 第22行 设置此规则的筛选器,使“type”属性的值为“primary”。如果此条件适用于特定行,则规则将根据位于 lines 24-26 . Lines 25-26 将线条的颜色设置为鲜红色 ('#FF0000'
)宽度为6像素,这样这些线条将呈现在其他两个道路类别的顶部,并且比其他两个道路类别的更厚。这样,“主要”道路在地图渲染中被优先考虑。
基于缩放的线条¶
这个例子改变了 简单线条 不同缩放级别的样式。

基于缩放的线条:放大¶

基于缩放的线条:部分缩放¶

基于缩放的线条:缩小¶
代码¶
Download the "Zoom-based line" YSLD
title: 'YSLD Cook Book: Zoom-based line'
feature-styles:
- name: name
rules:
- name: Large
scale: [min,1.8e8]
symbolizers:
- line:
stroke-color: '#009933'
stroke-width: 6
- name: Medium
scale: [1.8e8,3.6e8]
symbolizers:
- line:
stroke-color: '#009933'
stroke-width: 4
- name: Small
scale: [3.6e8,max]
symbolizers:
- line:
stroke-color: '#009933'
stroke-width: 2
细节¶
在创建自然外观的地图时,通常需要在更高的缩放级别上使形状更大。此示例根据缩放级别(或更准确地说,缩放分母)更改线条的厚度。比例分母是指地图的比例。比例尺分母为10000表示地图的比例尺为1:10000,以地图投影的单位表示。
备注
确定要使用的适当比例分母(缩放级别)超出了本例的范围。
此样式包含三个规则。三条规则设计如下:
规则顺序 |
规则名称 |
比例分母 |
线条宽度 |
---|---|---|---|
1 |
大 |
1:180000000或以下 |
6 |
2 |
培养基 |
1:180000000至1:360000000 |
4 |
3 |
小的 |
大于1:360000000 |
2 |
这些规则的顺序并不重要,因为每个规则中指定的比例不重叠。
第一条规则( lines 5-10 )是最小的比例分母,对应于视图“放大”的时间。比例规则设置为 第6行 ,以便该规则适用于比例分母小于等于180000000的任何地图。 Lines 9-10 画一条深绿色的线 ('#009933'
)宽度为6像素。
第二条规则( lines 11-16 )是中间比例分母,对应于视图“部分缩放”的时间。 第12行 设置比例,使规则适用于比例分母介于180000000和360000000之间的任何地图。(下限是包含的,上限是独占的,因此精确到360000000的缩放级别将 not 除比例外,此规则与上一规则的唯一区别是线条的宽度,在 第16行 .
第三条规则( lines 17-22 )是最大的比例分母,对应于地图“缩小”的时间。比例规则设置为 第18行 ,以便该规则适用于任何比例尺分母为360000000或更大的地图。同样,此规则与其他规则之间的唯一区别是线条的宽度,在 第22行 .
这种样式的结果是,当一条线放大时,线的宽度会变大,而当一条线缩小时,线的宽度会变小。