4.7. 演练:使用WMS对图层进行高级样式设置和分组

您已经学习了如何使用GeoServer和一些基本的SLD示例将单个层作为WMS来服务和设置其样式。现在,您将进一步使用QGIS为您设置样式。您还将看到如何使用GeoServer对多个WMS图层进行分组。

有些步骤要求您应用在上一个演练中学习的技能。您可能需要暂停并检查以完成这些步骤。

4.7.1. 用QGIS创建 SLD

QGIS允许您将当前图层符号保存为SLD。然后,使用在上一演练中学习的相同过程在GeoServer中应用SLD。在QGIS中设置图层样式要比编写XML容易得多。但是,请注意,某些功能(如标签)未保存在SLD中。此外,在GeoServer中应用该样式时,其外观可能略有不同。准备好用试错法把事情弄对。

让我们来设计一些其他费城的基础层,我们在前面的课程中使用过,例如道路和城市边界。我们最终会将它们与同一WMS中的邻居层组合在一起。

  1. 使用上一演练中的过程在GeoServer中将费城/roads.shp和费城/city_limits.shp文件发布为图层。这应该相对容易,因为您不必创建新的工作区和存储区。使用geog585工作区和您已经设置的费城商店。从单击左侧菜单中的“图层”链接的步骤开始。

    完成后,应该在图层列表中有两个新图层。

../../_images/published_layers.png

图4.17 GeoServer中的图层列表

  1. 启动QGIS并将Philadelphia/roads.shp和Philadelphia/city_limits.shp文件添加为图层。请确保添加的是shapefile,而不是新发布的WMS服务。

    注意:如果图层垂直偏移20公里,请右键单击图层列表中的每个图层,然后单击“设置图层CRS”。然后将CRS设置为EPSG:3857。即使您使用OGR将所有这些层投影到EPSG:3857,有时QGIS需要您告诉它使用EPSG:3857的定义。

  2. 将城市边界设计为没有轮廓的浅灰色填充。

  3. 使用细线(默认宽度为“精细”)将道路设置为稍微深一点的灰色。你应该吃这样的东西:

../../_images/essen_fig_4_18.png

图4.18显示添加图层的QGIS

  1. 在“图层”列表中,双击“道路”图层并选择“符号”选项卡。

  2. 在左下角,选择样式>保存样式…,然后选择“作为SLD样式文件”选项并将其保存为grayroads.SLD。

../../_images/qgis34_700_6.png

图4.19保存SLD对话框

  1. 返回GeoServer Web管理页面,然后单击左侧菜单中的样式。

  2. 使用上一个演练中的过程创建名为grayroads的新样式。作为此过程的一部分,上载从QGIS中保存的grayroads.sld文件。

  3. 使用上一个演练中的过程将grayroads样式应用为已在GeoServer中发布的费城道路图层的默认样式。在OpenLayers中预览图层,以确保按预期应用样式。

../../_images/geoserver_2_8_3_fig_4_20.png

图4.20地理服务器预览地图层

上述步骤非常重要,因为您可以在不编辑任何XML的情况下实现所需的样式。

  1. 对浅灰色城市边界样式重复上述步骤。具体来说,将浅灰色多边形样式保存为SLD,使用此SLD在GeoServer中创建一个样式,然后将其作为city_limits图层的默认样式应用。如果遇到麻烦,请在课程讨论论坛上留言。

4.7.2. 使用GeoServer对WMS中的多个图层进行分组

在某些情况下,您将使用WMS作为主题层,并将其放置在使用瓦片的非WMS基础地图的顶部。这是您在上一个演练中所做的。在某些情况下,当您有一个非常简单的地图时,您可以对主题层和基础层使用WMS。让我们来看看GeoServer如何让您在一个WMS中将多个层组合在一起。我们将使用您已经在geog585工作区中发布并设置样式的邻里层、城市边界层和道路层。

  1. 打开GeoServer Web管理页面,然后单击左侧菜单中的“图层组”。

  2. 单击“添加新图层组”。

  3. 设置前四个属性,如下所示:

    名称-邻里关系地图标题-费城邻里关系地图摘要-使用从Zillow.com工作区获得的数据绘制费城邻里关系地图-geog585

  4. 向下滚动,并使用“添加层”链接添加三个层。使用箭头将它们按如下所示的顺序放置。请注意,列表中的顶层是先绘制的,列表中的第二层是在该层之上绘制的,等等,这样会产生一个与预期相反的层列表。

../../_images/layer_order.png

图4.21 GeoServer添加层图形用户界面

  1. 向上滚动一点,将坐标参考系设置为EPSG:3857。然后单击“生成边界”以计算服务的边界坐标。

../../_images/qgis34_700_7.png

图4.22 GeoServer生成边界对话框

  1. 转到“瓦片缓存”选项卡,取消选中“为此层组创建缓存层”。尽管GeoServer允许您为此层创建瓦片缓存,但我们将在下一课中重点介绍如何使用名为tilemil的程序创建缓存,该程序具有优越的绘图选项。

  2. 单击“保存”。您应该在列表中看到您的新组层。如果您在GeoServer中获得了nullPointerException,请继续执行以下步骤(如果可以)。如果它们不起作用,请检查您以前的步骤,并确保所有内容都准确完成,然后在技术讨论论坛上张贴如果您仍然有问题。

  3. 使用层预览链接在OpenLayers查看器中预览组层。您应该会看到类似下面的样式(注意,我已经放大了预览的初始范围)。

../../_images/geoserver_2_8_3_fig_4_23.png

图4.23 GeoServer预览样式层

  1. 在QGIS中打开一个新地图,并使用上一演练中的技术连接到组图层(在下面的对话框中再次单击“连接”以查看WMS中更新的图层列表)。记住将CRS设置为EPSG:3857。

../../_images/qgis34_700_8.png

图4.24 QGIS添加WMS层图形用户界面

该图层应作为单个实体显示在QGIS图层列表中:

../../_images/essen_fig_4_25.png

图4.25 QGIS图层列表示例

如果在添加层时遇到错误,请尝试通过单击“设置”菜单>“选项”清除QGIS WMS缓存,转到“选项”框的“网络”选项卡,然后单击红色的小垃圾箱图标清除缓存。

本练习演示了如何在GeoServer中设置任意数量图层的样式,并将它们组合为动态绘制的WMS。如果有许多层要组合,则使用瓦片会更快、更具可伸缩性,这将在下一课中学习。但是,如果您只需要几层或有限的用户使用WMS,那么您所学到的技术就足以启动一个快速而简单的web地图。