线¶
虽然线条看起来也可以是简单的形状,有长度但没有宽度,但是有许多选项和技巧可以使线条显示得很好。
线条层示例¶
这个 lines layer
下面的例子中使用的是一个虚构国家的道路信息。作为参考,下面包含了该层中点的属性表。
fid (功能ID) |
name (道路名称) |
type (道路等级) |
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像素。

简单线条¶
代码¶
1 * {
2 stroke: black;
3 stroke-width: 3px;
4 }
细节¶
唯一的规则要求一个黑色的笔画(这个属性是强制的,以使笔画实际显示),3像素宽。
带边框的线条¶
此示例演示如何绘制带边框的线条(有时称为“cased lines”)。在这种情况下,线条以3像素的蓝色中心和1像素宽的灰色边框绘制。

带边框的线条¶
代码¶
1 * {
2 stroke: #333333, #6699FF;
3 stroke-width: 5px, 3px;
4 stroke-linecap: round;
5 z-index: 0, 1;
6 }
细节¶
CSS中的行没有“填充”的概念,只有“笔划”。因此,与点或多边形不同,不可能为线几何体的“边”设置样式。但是,可以通过绘制每行两次来达到这种效果:一次以一定的宽度绘制,另一次以较小的宽度绘制。这给了填充和笔画的错觉,除了沿着小线条的边缘之外,其他地方的大线条都被遮住了。
该样式通过指定两个笔画和两个笔画宽度来使用“多值属性”CSS支持。这会导致每个特征被绘制两次,第一次是深灰色。 (#333333
)行宽5像素,然后是较细的蓝色 (#6699FF
)行3像素宽。
由于每行绘制两次,渲染的顺序是 very 重要。如果没有Z索引指示,每个特征将首先绘制灰色笔画,然后绘制蓝色笔画,然后渲染引擎将移动到下一个特征,依此类推。当线条交叉时,这将导致难看的重叠。通过使用z-index属性( 第3行 )相反,所有的灰色线条将首先被绘制,然后所有的蓝色线条将被绘制在顶部,从而确保蓝色线条在视觉上连接。
“stroke linecap”属性是唯一具有单个值的属性,这是因为灰色和蓝色线的值相同。
结果是3像素蓝线和1像素灰色边框,因为5像素灰线将在3像素蓝线的每侧显示1像素。
虚线¶
这个例子改变了 简单线条 创建一条由5个像素的绘制线和2个像素的空格交替组成的虚线。

虚线¶
代码¶
1 * {
2 stroke: blue;
3 stroke-width: 3px;
4 stroke-dasharray: 5 2;
5 }
细节¶
在本例中,我们创建一条3像素宽的蓝线,并指定一个值为“5 2”的虚线数组,这将创建一个5像素的绘制线的重复图案,后跟2个像素的省略线。
铁路(孵化)¶
此示例使用图案填充创建铁路样式。线条和图案填充均为黑色,主线的厚度为2像素,垂直图案填充的宽度为1像素。

铁路(孵化)¶
代码¶
1 * {
2 stroke: #333333, symbol("shape://vertline");
3 stroke-width: 3px;
4 :nth-stroke(2) {
5 size: 12;
6 stroke: #333333;
7 stroke-width: 1px;
8 }
9 }
细节¶
在本例中,使用多值笔划:第一个值使渲染器绘制深灰色线条(根据“笔划宽度”属性,宽度为3像素),而第二个值通过反复重复“shape://vertline”符号来绘制线条,创建阴影效果。T.
为了指定符号本身的绘制方式,在以下位置使用“:nth stroke(2)”伪选择器: 第4行 指定重复符号的选项:特别是指示渲染器创建一个12px宽的符号,深灰色笔划1像素宽。
间隔图形符号¶
本例使用图形笔画和短划线数组创建“点和空间”线条类型。添加破折号数组规范允许控制一个符号和下一个符号之间的空间量。如果不使用破折号数组,线条将密集地填充点,每个点都与前一个点接触。

沿直线的间隔符号¶
代码¶
1 * {
2 stroke: symbol(circle);
3 stroke-dasharray: 4 6;
4 :stroke {
5 size: 4;
6 fill: #666666;
7 stroke: #333333;
8 stroke-width: 1px;
9 }
10 }
细节¶
与以前的其他示例一样,此示例使用 symbol(circle)
沿直线放置图形符号。
符号详细信息在嵌套规则中指定,位于 第4行 使用“:stroke”伪选择器,创建一个4像素宽、深灰色轮廓的灰色填充圆。
符号之间的间距由 stroke-dasharray
在 第3行 它指定4个像素的笔向下(刚好足以绘制圆)和6个像素的笔向上,以提供间距。
带短划线偏移的交替符号¶
此示例演示如何创建交替使用虚线和图形符号的复杂线条样式。代码建立在前面示例中所示的功能之上:
stroke-dasharray
控制向下/向上打开行为以生成虚线
symbol(...)
将两个符号组合在一起沿一行放置符号,允许控制符号间距
这还显示了 dash offset ,它控制在破折号数组中开始渲染的位置。例如,使用破折号数组 5 10
短划线偏移量为 7
渲染器从开始绘制7个像素的图案。它跳过5个像素的“笔下”部分和2个像素的“笔上”部分,然后向上绘制剩余的8个像素,然后向下绘制5个像素,向上绘制10个像素,依此类推。
该示例演示如何使用这些功能创建两个同步的短划线数组序列,一个绘制线段和其他符号。

交替短划线和符号¶
代码¶
1 * {
2 stroke: blue, symbol(circle);
3 stroke-width: 1px;
4 stroke-dasharray: 10 10, 5 15;
5 stroke-dashoffset: 0, 7.5;
6 :nth-stroke(2) {
7 stroke: #000033;
8 stroke-width: 1px;
9 size: 5px;
10 }
11 }
细节¶
使用伪选择器“nth stroke(2)”在 第6行 ,要求圆的宽度为5像素,没有填充,轮廓为深蓝色。
带默认标签的行¶
此示例在简单行上显示文本标签。这是在没有任何其他自定义的情况下标签的显示方式。

带默认标签的行¶
代码¶
1 * {
2 stroke: red;
3 label: [name];
4 font-fill: black;
5 }
细节¶
此示例使用红色笔画线条,然后在线条中心添加水平黑色标签,使用“name”属性填充标签。
_css_line_
带垂直偏移的标签¶
这个例子在简单的行上显示了一个文本标签,就像前面的例子一样,但是会强制标签与行平行,并且会将它们偏移几个像素。

带默认标签的行¶
代码¶
1 * {
2 stroke: red;
3 label: [name];
4 label-offset: 7px;
5 font-fill: black;
6 }
细节¶
此示例与前一个示例逐行相同,但它添加了一个新属性“Label-Offset”,对于具有单个值的行,该属性被解释为与该行的垂直偏移量。标签沿一条直线绘制,与标签中心点的直线方向平行。
标签后一行¶
此示例呈现文本标签,使其跟随线条的轮廓。

标签后一行¶
代码¶
1 * {
2 stroke: red;
3 label: [name];
4 font-fill: black;
5 label-follow-line: true;
6 }
细节¶
作为 带默认标签的行 示例显示,默认标签行为不是最佳的。
此示例与 带默认标签的行 示例,但不包括 第5行 如果指定了“标签跟随行”选项,则强制标签严格跟随行。
并非所有标签都可见,部分原因是冲突解决,部分原因是渲染器找不到足够长且“笔直”的线段来绘制标签(默认情况下,不会在急转弯处绘制标签)。
优化标签放置¶
此示例优化了行的标签放置,以便显示最大数量的标签。

优化标签¶
代码¶
1 * {
2 stroke: red;
3 label: [name];
4 font-fill: black;
5 label-follow-line: true;
6 label-max-angle-delta: 90;
7 label-max-displacement: 400;
8 label-repeat: 150;
9 }
细节¶
此示例与前一个示例类似, 标签后一行 .唯一的区别在于 lines 6-8 . 第6行 设置标签将遵循的最大角度。这会将标签设置为从不弯曲超过90度,以防止标签因明显的曲线或角度而变得难以辨认。 第7行 将标签的最大位移设置为400像素。为了解决与重叠标签的冲突,GeoServer将尝试移动标签,使它们不再重叠。此值设置标签相对于其原始位置的移动距离。最后, 第8行 将标签设置为每150像素重复一次。一个特性通常只接收一个标签,但这可能会导致长行混淆。将标签设置为重复可确保始终在本地标记行。
优化风格标签¶
此示例改进了 优化标签放置 例子。

优化风格标签¶
代码¶
1 * {
2 stroke: red;
3 label: [name];
4 font-family: Arial;
5 font-weight: bold;
6 font-fill: black;
7 font-size: 10;
8 halo-color: white;
9 halo-radius: 1;
10 label-follow-line: true;
11 label-max-angle-delta: 90;
12 label-max-displacement: 400;
13 label-repeat: 150;
14 }
细节¶
此示例与 优化标签放置 .唯一的区别是:
已指定字体系列和粗细
为了使标签更容易阅读,添加了一个白色的“光环”。光环在文本周围绘制一个1像素的白色边框,使其从背景中脱颖而出。
基于属性的线条¶
此示例根据“类型”(道路类别)属性对线进行不同的样式设置。

Attribute-based line¶
代码¶
1 [type = 'local-road'] {
2 stroke: #009933;
3 stroke-width: 2;
4 z-index: 0;
5 }
6
7 [type = 'secondary'] {
8 stroke: #0055CC;
9 stroke-width: 3;
10 z-index: 1;
11 }
12
13 [type = 'highway'] {
14 stroke: #FF0000;
15 stroke-width: 6;
16 z-index: 2;
17 }
细节¶
在我们虚构的国家里,有三种道路等级,从主干道到高速高速公路:“公路”、“二级公路”和“地方公路”。为了确保以正确的重要性顺序渲染道路,在每个规则中都放置了一个“z-index”属性。
三条规则设计如下:
规则顺序 |
Rule name / type |
Color |
Size |
1 |
地方公路 |
|
2 |
2 |
第二的 |
|
3 |
3 |
公路 |
|
6 |
Lines 1-5 包含第一个规则,过滤器匹配“type”属性值为“local road”的所有道路。如果此条件适用于特定行,则规则将使其变为深绿色,宽2像素。所有这些线都是先渲染的,因此位于最终地图的底部。
Lines 7-11 匹配“次要”道路,将其涂成深蓝色,宽3像素。如果“z-索引”为1,则在本地道路之后渲染,但在公路下方渲染。
Lines 13-17 匹配“公路”道路,将其涂成6像素宽的红色。因此,这些道路在所有其他道路之上都是最后的痛苦。
基于缩放的线条¶
这个例子改变了 简单线条 不同缩放级别的样式。

Zoom-based line: Zoomed in¶

Zoom-based line: Partially zoomed¶

Zoom-based line: Zoomed out¶
代码¶
1 * {
2 stroke: #009933;
3 }
4
5 [@sd < 180M] {
6 stroke-width: 6;
7 }
8
9 [@sd > 180M] [@sd < 360M] {
10 stroke-width: 4;
11 }
12
13 [@sd > 360M] {
14 stroke-width: 2;
15 }
细节¶
在创建自然外观的地图时,通常需要在更高的缩放级别上使形状更大。此示例根据缩放级别(或更准确地说,缩放分母)更改线条的厚度。比例分母是指地图的比例。比例尺分母为10000表示地图的比例尺为1:10000,以地图投影的单位表示。
备注
确定要使用的适当比例分母(缩放级别)超出了本例的范围。
此样式包含三个规则。三条规则设计如下:
规则顺序 |
规则名称 |
比例分母 |
线条宽度 |
1 |
大 |
1:180000000或以下 |
6 |
2 |
培养基 |
1:180000000至1:360000000 |
4 |
3 |
小的 |
大于1:360000000 |
2 |
这些规则的顺序并不重要,因为每个规则中指定的比例不重叠。
第一个规则提供了所有缩放级别使用的笔划颜色,即深灰色,而其他三个规则则利用“@sd”伪属性应用基于当前缩放级别的不同笔划宽度层叠在其上。只能使用“<”和“>”运算符比较“@sd”伪属性,使用任何其他运算符都会导致错误。
这种样式的结果是,当一条线放大时,线的宽度会变大,而当一条线缩小时,线的宽度会变小。