目录

上一个主题

5. 设计图层样式

下一个主题

5.2. 使用点符号


5.1. 了解样式化层描述符

地图通常由一组图层组成。每个图层都包含确定类型的要素。 当您向GeoServer请求地图时, 它必须从存储库中提取特征(例如,从shapefile)并根据某些规则绘制它们。 当然,它需要一个存储库来存储这些规则, 因此GeoServer开发人员需要确定包含规则的存储介质的格式。

地图渲染不仅仅是一个GeoServer问题;毫不奇怪,它对所有生成地图的软件都很常见。 因此,有人定义了一种设计图层样式的标准方法并不奇怪。 实际上,GeoServer不使用样式的自定义格式,而是利用OGC标准。

该标准描述了文档的结构以及可以使用哪些规则。

包含符号定义和绘图规则的文档称为“样式层描述符”(SLD)样式 它是一个文本/XML文件(在GeoServer中的扩展名为 sld )。 SLD是基于XML的标记语言附加到该标准的是定义SLD语法的XSD架构。 如果你对标准感兴趣,你可以找到SLD的官方文件: http://portal.opengeospatial.org/files/?artifact_id=22364 和XSD模式 http://schemas.opengis.net/sld/.

5.1.1. 编辑样式

作为XML文件,可以使用不同的编辑工具编辑样式。第一个选择应该是您首选的文本编辑器, 例如, viemacsnotepad++ . 考虑一下,当您添加规则和符号时, 事情可能会变得相当复杂。一个具有突出显示XML语法的工具可能会极大地帮助您调试样式。 当然,如果您接受过使用它的培训,一个支持XSD验证的专用XML编辑器可能会有更大的帮助, 但通常我会发现它太过分了。

谈到编辑样式,我们不应该忘记提到GeoServer管理界面。 实际上,GeoServer包含一个简单的GUI来查看和编辑包含样式规则的XML文件。 它包含一个丰富的编辑器和一个SLD验证器;您在第三章进行了初步了解, 探索管理界面 .

除了XML/text编辑器之外,您还可以考虑使用GUI工具创建样式;一些开源桌面GIS可能会生成SLD文件。 例如, QGIS 可以在XML文件中转换图层图例。QGIS支持shapefile、Oracle和PostGIS层。 将它们添加到地图后,可以使用图形用户界面设置颜色、线宽和其他绘图属性。 然后可以将图层符号导出到SLD文件中。

查看QGIS项目站点 http://qgis.osgeo.org/ .

5.1.2. 探索样式的标准结构

如果要用隐藏XML代码复杂性的图形程序创建样式,那么有必要了解文档的基本语法和结构。 您可能需要在创建后修改样式,程序可能不支持您需要添加的功能,或者您只是在一个服务器上, 只有使用文本编辑器才能进行编辑。此外,您将在本章的示例中编写XML代码。

样式的第一部分始终与下面的代码片段相同:

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
    xsi:schemaLocation="http://www.opengis.net/sldStyledLayerDescriptor.xsd"
    xmlns="http://www.opengis.net/sld"
    xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

第一行是XML声明,然后我们得到每个SLD文件的根元素 <StyledLayerDescriptor/> . 它包含一个属性,声明它使用的标准版本(GeoServer可以使用1.0和1.1.0sld文档), 然后是名称空间和架构声明。在本章的其余部分中,为了简洁起见, 我们将从示例中省略这一部分;但是请记住,对于您正在编写的文件,这是绝对必需的。

<StyledLayerDescriptor/> 包含 <NamedLayer/><UserLayer/> 元素。 每个图层都为单个图层定义图形规则。实际上,它们包含 <UserStyle/> 元素。

<UserStyle/> 元素包含 <FeatureTypeStyle/> 如果图层是矢量图层, 或者 <CoverageStyle/> 如果我们正在为栅格编写规则。

两个 <FeatureTypeStyle/><CoverageStyle/> ,包含 <rule/> 元素。 这是一个元素,我们将在其中定义如何绘制特征,并详细查看其语法。

行动时间–查看GeoServer捆绑样式

在开始编写特定于要素类型的规则之前, 让我们先看一下与GeoServer捆绑在一起的样式。 在前面的章节中添加数据时,您已经使用了它们。 让我们看看这些文档并搜索我们知道的元素:

1. 打开GeoServer管理界面 http://localhost:8080/geoserver/web/ 然后登录。 然后选择 Data | styles 左菜单项:

style

图 5.1 style

  1. 选择 capitals 格式的 Style Editor 窗口将打开并加载XML代码:

cpatial

图 5.2 cpatial

  1. capitals``* 是一个相当简单的例子。您可以看到样式所需的必需元素。 ``UserStyle 用一条规则定义 circle 带有红色填充和黑色笔划的符号。

4.现在试着添加一些错误的内容。在 <Rule> 第11行元素:

<Title> This is a clever rule </Title>

5.点击 验证 按钮。GeoServer检查您的文件并报告在插入代码的位置发生的错误。 它显示在第13行,因为不能有两个 Name 规则内部:

validata 6.删除插入的行并单击 Validate 再次按下按钮。 现在,GeoServer显示以下消息:

No validation errors

7.加载其他样式并查看语法。你不必完全理解它们, 我们将在本章的剩余部分讨论它。

刚刚发生了什么?

我们简要地看了一下GeoServer样式编辑器和捆绑的样式。 样式编辑器的一个非常重要的特性是 验证 按钮。 可以使用外部工具组合样式,并在开始使用它们之前对其进行验证。

突击测验-SLD基本要素

问题1。样式中可以有多个< StyledLayerDescriptor >元素吗

1.不,它是根元素,必须是每个样式中的第一个,并且只能包含一个引用。

2.是的,但前提是要创建多层样式。

3.不,它是根元素的子元素,只能包含一次。

问题2。样式中可以有多个 < Title > 元素吗?

1.不,它定义了样式的标题,并且只能作为根元素的子元素出现一次。

2.是的,例如,您可以将一个作为两个 <UserStyle><Rule> 元素。

3.不,它不是SLD元素;您必须使用 <Name> 用于描述性字符串。

5.1.3. 加载数据以进行样式设置

我们需要一些数据来绘制漂亮的地图。 我们将使用免费提供的自然地球数据集。

Natural Earth以shapefile格式提供了多个数据集,打包在三个不同的参考比例尺中。 在本章的样式示例中,我们将使用一个子集;您需要下载以下数据集:

http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_populated_places.zip

http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/physical/ne_50m_rivers_lake_centerlines.zip

http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads.zip

http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_railroads.zip

http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip

将它们全部保存在同一文件夹中,并将其作为新的数据存储添加到GeoServer配置中。 参考第五章,添加数据,以获取有关数据存储配置的详细信息。 不需要发布shapefile;如果要先查看数据,请使用默认样式。 所有数据都在地理坐标WGS84中。SRID是ESPG:4326。

除了这些数据之外,您还可以在本书附带的代码文件中找到一些资源, 您可以从Packt网站下载这些资源。代码文件包含我们将在本章中编写的所有样式的XML文件, 但我建议您将它们作为样式中使用的参考和图形资源。