5.3. 线状符号¶
线条是可以在地图上绘制的其他简单特征。在行规则中,您有
<LineSymbolizer>
定义颜色、厚度以及要绘制的线类型(例如,连续线或虚线)的元素。
至于点,我们将从一个简单的符号开始,然后转移到更复杂的例子。
5.3.1. 行动时间–创建简单的线条样式¶
我们将使用来自自然地球的河流和湖泊中心线来创建一个具有浅天蓝色的世界河流地图:
1.拿着 PopulatedPlaces.xml 文件,复制到 Rivers.xml , 然后在文本编辑器中编辑新文件。
2.转到第9行并替换 Name
具有以下内容的元素: <Name>Rivers</Name>
3.转到第11行并替换 书名 具有以下内容的元素:
<Title> Geoserver Beginners Guide: Rivers simple stroke </Title>
4.现在,替换 FeatureTypeStyle
代码(从第13行到第25行)包含以下代码。
我们使用的是一条连续线,这是默认值,将宽度设置为 2 像素和颜色:
<Rule>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#82CAFA</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
5.现在保存您的文档并将其上载到GeoServer 中的样式编辑器。
6.点击 验证 检查你是否拼错了什么。当它没有返回错误时,单击 提交 按钮。
7.现在将新样式应用于 50m-rivers-lake-centerlines 层。
8.打开“图层预览”地图。 当您放大到北美时,它的外观应如以下屏幕截图所示:

图 5.13 image136¶
刚刚发生了什么?¶
我们创造了一种新的风格,用简单的线条符号来画河流。 至于点,有几种方法可以画出比彩色线更漂亮的东西。 正如您可能已经猜到的,您也可以应用我们用于线的点的合并技术。
5.3.2. 行动时间-添加边框和中心线¶
在地图上,主要道路(如高速公路)通常用比连续的彩色线更复杂的符号表示。 您将使用三个线符号来构建高速公路的表示:
1.拿着 Rivers.xml 文件,复制到 Roads.xml , 然后在文本编辑器中编辑新文件。
2.转到第9行并替换 Name
具有以下内容的元素: <Name>Roads</Name>
3.转到第11行并替换 书名 具有以下内容的元素:
<Title>Geoserver Beginners Guide: Roads complex symbol</Title>
4.在第16行,将颜色设置为红色:
<CssParameter name="stroke">#FF0000</CssParameter>
5.在第17行,将宽度设置为 5 :
<CssParameter name="stroke-width">5</CssParameter>
6.在第13行之后,插入一个新的 LineSymbolizer
在下面的代码片段中。使用宽度 7
并将颜色设置为黑色。黑线将作为直线要素两侧的边界。
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">7</CssParameter>
</Stroke>
</LineSymbolizer>
7.在第25行之后,插入一个新的 LineSymbolizer
章节。使用宽度 1
并将颜色设置为黑色。直线要素的中心将出现一条黑线。
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</LineSymbolizer>
8.现在保存您的文档并将其上载到GeoServer 中的样式编辑器。
9.点击 Validate 检查你是否拼错了什么。 当它没有返回错误时,单击 提交 按钮。
10.现在将新样式应用于 10m_roads_north_america 层。
11.打开“图层预览”地图。 shapefile包含许多功能,并且符号对于完整的缩放图太大。 放大到一个小区域,例如,洛杉矶地区,如以下屏幕截图所示:

图 5.14 image138¶
刚刚发生了什么?¶
你学会了创造复杂的线条符号。通过合并不同大小和颜色的线条, 您可以创建符号来表示您在兰德•麦克纳利(Rand McNally)地图册上可以找到的几乎所有类型的道路。 但是如果你要去铁路旅行呢?
5.3.3. 行动时间-使用阴影¶
到目前为止,我们已经使用了标准的SLD语法;您可以使用这些样式并在另一个地图服务器上使用它们, 它将生成相同的地图。但这本书的重点是一个特定的地图服务器,我们可以使用供应商选项, 一个只有GeoServer 才有的小技巧,来创建一个类似铁路的符号:
1.拿着 Rivers.xml 文件,复制到 RailRoads.xml , 然后在文本编辑器中编辑新文件。
2.转到第9行并替换 Name
具有以下内容的元素:
<Name>RailRoads</Name>
3.转到第11行并替换 书名 具有以下内容的元素:
<Title>Geoserver Beginners Guide: RailRoads with hatching</Title>
4.转到第16行并将颜色更改为黑色:
<CssParameter name="stroke">#000000</CssParameter>
5.去20号线然后在 Rule
元素,添加另一个 Rule
对于一个
LineSymbolizer
元素:
<Rule>
<LineSymbolizer>
<Stroke>
</Stroke>
</LineSymbolizer>
</Rule>
6.您添加的规则用于填充;您需要指定必须如何绘制填充线。在 划
元素。在第四行中, 指定 WellKnownName
元素以通知GeoServer 必须垂直于几何要素绘制线。
在第6行和第7行中,将颜色设置为黑色,将填充线的宽度设置为 1 .
最后在第10行,设置填充线的长度。
<GraphicStroke>
<Graphic>
<Mark>
<WellKnownName>shape://vertline</WellKnownName>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</GraphicStroke>
7.现在保存您的文档并将其上载到GeoServer 中的样式编辑器。
8.点击 Validate 检查你是否拼错了什么。当它没有返回错误时,单击 提交 按钮。
9.现在将新样式应用于 10m_railroads 层。
10.打开“图层预览”地图。放大到一小块区域并查看结果。

图 5.15 image139¶
刚刚发生了什么?¶
您使用了供应商选项来启用填充线。虽然这种样式化特性的方式不可移植, 但它可以极大地帮助您编写漂亮的地图。让我们在下一节中看到线条的另一个变体。
5.3.4. 行动时间-使用虚线¶
在许多纸质地图上,表示在建或规划道路的常用符号是两条平行虚线。 你能想象如何使用SLD吗?它需要两条线与一个新的SLD元素合并在一起。 我们将在本节中看到这一点:
1.拿着 Roads.xml 存档并复制到 DashedRoads.xml , 然后在文本编辑器中编辑新文件。
2.转到第9行并替换 Name
具有以下代码的元素:
<Name>DashedRoads</Name>
3.转到第11行并替换 Title 具有以下代码的元素:
<Title>Geoserver Beginners Guide: Roads under construction with dashing</Title>
4.转到第17行并将符号的宽度更改为 5 :
<CssParameter name="stroke-width">5</CssParameter>
5.在前一行之后添加一行,以设置黑线的划线:
<CssParameter name="stroke-dasharray">15 10</CssParameter>
6.转到第22-23行,将颜色更改为黑色,将宽度更改为 3 :
<CssParameter name="stroke">#FFFFFF</CssParameter>
<CssParameter name="stroke-width">3</CssParameter>
7.在前一行之后添加一行,以设置黑线的划线:
<CssParameter name="stroke-dasharray">15 10</CssParameter>
8.删除最后一个 LineSymbolizer
代码,从第28行到第33行。
第三条线不再需要用平行虚线表示道路。
9.现在保存您的文档并将其上载到GeoServer 中的样式编辑器。
10.点击 Validate 检查你是否拼错了什么。 当它没有返回错误时,单击 提交 按钮。
11.现在去 Data | layers 部分并单击 10m_roads_north_ 美国 打开图层属性窗体。 切换到 Publishing 选项卡。
12.转到 Style 部分,然后将 DashedRoads 添加到 Selected Styles 列表中。 点击 保存 。
13.打开“图层预览”,然后从下拉列表中选择 DashedRoads 样式。 由于这是一个复杂的符号, 您必须放大到一小块区域才能清楚地看到该符号的外观:

图 5.16 image140¶
刚刚发生了什么?¶
您通过合并两条线构建了一个虚线符号。 但是还有更多的工作可以通过合并完成; 您可以混合使用虚线和标记符号。
5.3.5. 行动时间-混合虚线和标记¶
自然地球并没有为渡槽提供数据集,但您可能想知道如何创建一个适当的符号来表示它们。 渡槽通常在地图上用虚线和小圆交替表示,均为浅蓝色:
1.拿着 DashedRoads.xml 文件,复制到 DashingAndMarkers.xml , 然后在文本编辑器中编辑新文件。
2.转到第9行并替换 Name
元素为:
<Name>DashingAndMarkers</Name>
3.转到第11行并替换 Title 元素为:
<Title>Geoserver Beginners Guide: Aqueducts with dashing and circle</Title>
4.转到第16行并更改 LineSymbolizer
元素来表示虚线。
将浅蓝色的颜色设置为十六进制值, 将宽度设置为 2 和A 虚线阵列 属于 2010年
有规律地间隔划:
<CssParameter name="stroke">#ADD8E6</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
<CssParameter name="stroke-dasharray">10 10</CssParameter>
5.现在删除从第21行到第27行的所有代码。 我们需要一个完全不同的符号,类似于我们用来孵化的东西。
6.转到第23行并插入以下代码片段。你可以看到在第6行, 我们加了一个
WellKnownName
元素并将其设置为 圆圈 . 然后我们把它的颜色设为浅蓝色
宽度 到 1 . 圆宽度设置为 5 使其大于虚线:
<LineSymbolizer>
<Stroke>
<GraphicStroke>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Stroke>
<CssParameter name="stroke">#ADD8E6</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</Mark>
<Size>5</Size>
</Graphic>
</GraphicStroke>
<CssParameter name="stroke-dasharray">5 15</CssParameter>
<CssParameter name="stroke-dashoffset">7.5</CssParameter>
</Stroke>
</LineSymbolizer>
7.现在保存您的文档并将其上载到GeoServer 中的样式编辑器。
8.点击 Validate 检查你是否拼错了什么。当它没有返回错误时, 单击 提交 按钮。
9.现在去 Data | layers 部分并单击 50m-rivers-lake-centerlines 打开图层属性窗体。 我们没有一个真正包含渡槽功能的层;我们将把河流改造成管道!切换到 Publishing 标签。
10.转到“样式”部分,然后将 DashingAndMarkers 添加到“选定样式”列表中。 点击保存。
11.打开“图层预览”贴图,然后从下拉列表中选择DashingAndMarkers样式。 放大到北美,并检查您的地图是否如以下屏幕截图所示。 您看到覆盖整个中西部土地的那条大型渡槽吗?

图 5.17 image141¶
刚刚发生了什么?¶
我们已经合并了标记,你已经学会了使用点特征和线。 现在是时候切换到最后一种形状:多边形。