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文件,可以使用不同的编辑工具编辑样式。第一个选择应该是您首选的文本编辑器, 例如, vi , emacs 或 notepad++ . 考虑一下,当您添加规则和符号时, 事情可能会变得相当复杂。一个具有突出显示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
左菜单项:

图 5.1 style¶
选择
capitals
格式的Style Editor
窗口将打开并加载XML代码:

图 5.2 cpatial¶
capitals``* 是一个相当简单的例子。您可以看到样式所需的必需元素。 有 ``UserStyle
用一条规则定义circle
带有红色填充和黑色笔划的符号。
4.现在试着添加一些错误的内容。在 <Rule>
第11行元素:
<Title> This is a clever rule </Title>
5.点击 验证 按钮。GeoServer 检查您的文件并报告在插入代码的位置发生的错误。 它显示在第13行,因为不能有两个 Name 规则内部:
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格式提供了多个数据集,打包在三个不同的参考比例尺中。 在本章的样式示例中,我们将使用一个子集;您需要下载以下数据集:
将它们全部保存在同一文件夹中,并将其作为新的数据存储添加到GeoServer 配置中。 参考第五章,添加数据,以获取有关数据存储配置的详细信息。 不需要发布shapefile;如果要先查看数据,请使用默认样式。 所有数据都在地理坐标WGS84中。SRID是ESPG:4326。
除了这些数据之外,您还可以在本书附带的代码文件中找到一些资源, 您可以从Packt网站下载这些资源。代码文件包含我们将在本章中编写的所有样式的XML文件, 但我建议您将它们作为样式中使用的参考和图形资源。