4.5. 将样式和符号应用于WMS

OGC允许一些灵活性来调整WMS层中使用的地图符号。这是通过引用一个称为样式层描述符(SLD)的XML块来实现的。SLD描述了应该在WMS中应用的所有符号大小、颜色和标记。SLD非常复杂their own OGC specification documents 定义它们应该如何操作。

sld可以由服务发布者或客户端设计。要制定一个真正有用的SLD,你必须对WMS中的层有一点了解。您可以通过调用WMS上的可选描述符操作来实现这一点。

一旦为SLD创建了XML,就可以通过以下几种方法之一应用它。最常见的方法是将SLD放在web服务器上的某个地方,并在发出GetMap请求时引用该文件的URL。GetMap请求中有一个可选的SLD参数,您可以将其用于此目的。另一种方法是使用GetMap请求的可选SLD_BODY参数,只需在请求的URL中直接提供相关的XML块。这显然会创建长而笨拙的url,并且需要很多特殊的字符编码或转义。

与sld一起使用的XML可能会变得冗长,并且往往包含许多嵌套级别。因此,你不太可能坐下来从头开始创作SLD。相反,您可能会从一个样本开始,并调整它以满足您的需要。或者,可以使用QGIS中的GUI环境设置图层样式,然后将其保存为SLD。

两种方法(从现有的样本开始SLD并从QGIS导出SLD)在课程演练中被覆盖。

4.5.1. SLDs和GeoServer

GeoServer将数据信息和样式信息完全分开。在“层”页中,定义要提供的数据集;在“样式”页中,定义所有可用的SLD。“编辑图层”页的“发布”选项卡是连接点并定义将应用于图层的样式的位置(有些模糊)。

../../_images/edit_layer_1new.png

图4.2 GeoServer发布选项卡

../../_images/edit_layer_2.png

图4.3 GeoServer中“发布”选项卡下的样式设置

在上图中,GeoServer管理员检查了添加到GeoServer的所有样式池(左),并选择其中三种样式(右)可用于FarmersMarkets层。如果用户在GetMap请求的styles参数中没有指定不同的样式,WMS将为层公布这三种样式,并使用称为FarmersMarkets的样式。

下面的示例不起作用,但它们向您显示了用于请求不同样式的URL结构。

使用默认样式(“FarmersMarkets”)的GetMap请求:

http://localhost:8080/geoserver/philadelphia/wms?service=WMS&version=1.1.0&request=GetMap&layers=philadelphia:FarmersMarkets&styles=&bbox=-8377237.031452011,4854963.883290707,-8357515.816574659,4877579.355521561&width=446&height=512&srs=EPSG:3857&format=image%2Fpng

替代默认样式并使用名为“point”的样式的GetMap请求:

http://localhost:8080/geoserver/philadelphia/wms?service=WMS&version=1.1.0&request=GetMap&layers=philadelphia:FarmersMarkets&styles=point&bbox=-8377237.031452011,4854963.883290707,-8357515.816574659,4877579.355521561&width=446&height=512&srs=EPSG:3857&format=image%2Fpng

注意,后一个URL包含styles=point,表示GeoServer应该使用名为“point”的SLD来绘制图层。或者,用户可以指定styles=FarmersMarketsLabeled。

4.5.2. 必读

继续之前,请阅读以下GeoServer文档页。其中包含有关SLD的一般信息、有关如何在GeoServer中应用SLD的技术说明,以及一组示例SLD,您可以在需要自己制作SLD时使用这些示例。在演练过程中,您将获得一些有关此技术的实践,但非常值得花时间熟悉文档的这一特定部分。事实上,在完成演练之前和之后阅读它可能是明智的,以便你确认你的学习并吸收最大的信息量。