目录

上一个主题

5.5. 添加标注

下一个主题

5.7. 设置可见性


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 样式。 似乎在镇上有一些新道路的宏伟计划!

image150

图 5.25 image150

刚刚发生了什么?

我们画了一张索罗普莱斯路线图。这并不比做一个单一的符号地图更难, 只是时间稍微长一点。使用 Filter 元素,您可以对特征进行分类, 并将它们分组到可以应用单个符号的同质集中。

试一试-线条的样式标签

我们没有设置路标。您可以通过单击找到道路编号, 但使用标签可能会很有用。我相信你可以修改最后的风格, 应用你之前所学的关于线标签。如果你有什么问题, 看看 RoadsThematicLabeled.xml 本章参考资料中包含的文件。