5.6. 专题制图¶
非常简单的地图可能定义得很好,每层只有一个符号, 但对于大多数可以找到的地图以及使用GeoServer 创建的地图来说,情况并非如此。 为了充分表达特征的含义,您需要应用一种符号学,它可以使您很容易地识别地图上的不同真实特征。 想想包含北美道路的道路层,州际公路与州际公路或联邦公路具有不同符号的地图更具可读性。 根据其国内生产总值象征的国家可以被描绘成世界上最富有的地区。
有许多不同类型的 专题地图 。最常见的一个是choropleth地图; 我们在第一章,地理信息系统基础 .
当然,SLD可以用来构建choropleth 地图; 您只需要为每个类定义一个分类规则和一个符号。
5.6.1. 行动时间-道路分类¶
自然地球提供的道路数据集具有一些属性,可以用来对道路进行分类。
您可以使用 CLASS
主题映射字段,为每个类指定不同的符号:
1.拿着 Roads.xml 文件,复制到 RoadsThematic.xml , 然后在文本编辑器中编辑新文件。
2.转到第9行并替换 Name
具有以下代码段的元素:
<Name>RoadsThematic</Name>
3.转到第11行并替换 书名 具有以下代码段的元素:
<Title>Geoserver Beginners Guide: Roads thematic map</Title>
4.这个 CLASS
字段包含六个不同的值: 州际的 , 联邦 , 州
, 其他 , 关闭 和 U/C .
我们将重复使用第一个值的符号, 州际的 .
您需要在规则中添加一个筛选器, 以便该符号将仅应用于具有 州际的
价值在 CLASS
字段。 添加 Name
元素内部 Rule
元素并将其设置为
州际的 :
<Name>Interstate</Name>
5.现在添加 Filter
元素和用途 PropertyIsEqualTo
设置筛选运算符。
PropertyName
设置要搜索的字段和 PropertyName 设置要搜索的值:
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CLASS</ogc:PropertyName>
<ogc:Literal>Interstate</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
6.现在创建一个新的 FeatureTypeStyle
元素并设置其 Filter 对于
联邦 道路:
<FeatureTypeStyle>
<Rule>
<Name>Federal</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CLASS</ogc:PropertyName> <ogc:Literal>Federal</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</Rule>
</FeatureTypeStyle>
7.为了 联邦 道路,使用带黑色边框的橙色线:
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FF7F00</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
8.现在添加 Rule
对于 州 道路;使用带黑色边框的黄色符号:
<FeatureTypeStyle>
<Rule>
<Name>State</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CLASS</ogc:PropertyName>
<ogc:Literal>State</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FFFF00</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
9.为了记住过去驾车环游全国时只能依靠纸质地图, 我们将为 其他 使用带灰色边框的蓝色符号的道路:
<FeatureTypeStyle>
<Rule>
<Name>Other</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CLASS</ogc:PropertyName>
<ogc:Literal>Other</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#808080</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#0000FF</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
10.我们对封闭道路不感兴趣,所以你不必为它们添加规则。 为添加规则 U/C ,即在建道路,并使用灰色虚线:
<FeatureTypeStyle>
<Rule>
<Name>Under Construction</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CLASS</ogc:PropertyName>
<ogc:Literal>U/C</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke-dasharray">15 10</
CssParameter>
<CssParameter name="stroke">#808080</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
11.你完成了!保存文档并将其上载到GeoServer 中的样式编辑器。
12.点击 Validate 检查你是否拼错了什么。当它没有返回错误时,单击 提交 按钮。
13.现在去 Data | layers 部分并单击 10m_roads_north_america 图层打开图层属性窗体。
14.转到 Style 部分,然后将 RoadsThematic 添加到 Selected Styles 列表中。 单击“保存”按钮。
15.打开“图层预览”地图,然后缩放到德克萨斯州休斯顿。 打开控件,然后从下拉列表中选择 RoadsLabeled 样式。 似乎在镇上有一些新道路的宏伟计划!

图 5.25 image150¶
刚刚发生了什么?¶
我们画了一张索罗普莱斯路线图。这并不比做一个单一的符号地图更难, 只是时间稍微长一点。使用 Filter 元素,您可以对特征进行分类, 并将它们分组到可以应用单个符号的同质集中。
试一试-线条的样式标签¶
我们没有设置路标。您可以通过单击找到道路编号, 但使用标签可能会很有用。我相信你可以修改最后的风格, 应用你之前所学的关于线标签。如果你有什么问题, 看看 RoadsThematicLabeled.xml 本章参考资料中包含的文件。