重要

Translation is a community effort you can join. This page is currently translated at 87.50%.

10.2. Lesson: Web Feature Services

Web要素服务 (WFS) 为用户提供可以直接在QGIS中加载的格式的GIS数据。与WMS不同,WMS只为您提供无法编辑的地图,而WFS则为您提供对要素本身的访问。

本课目标: 使用WFS并了解与WMS的区别。

10.2.1. ★☆☆ Follow Along: Loading a WFS Layer

  1. 新建地图。这仅用于演示目的,不会被保存。

  2. 单击 dataSourceManager 打开数据源管理器 按钮。

  3. 开启 wfs WFS / OGC API - 要素 选项卡。

  4. 单击 新建 按钮。

  5. 在出现的对话框中,输入 名称nsidc.orgURLhttps://nsidc.org/cgi-bin/atlas_south?version=1.1.0

    ../../../_images/new_wfs_connection.png
  6. 单击 确定 ,新建连接将显示在 服务器连接 中。

  7. 单击 连接 。将显示可用图层的列表:

    ../../../_images/wfs_connection_layers.png
  8. 取消勾选图层列表下方的 仅请求与视图范围重叠的要素 选项,因为您当前的地图画布可能无法涵盖我们关注区:南极洲。

  9. 查找 antarctica_country_border 图层。您可以使用顶部的 过滤器 栏。

  10. 单击图层将其选中。

  11. 查找并选择 south_poles_wfs 图层。您可能需要按住 Ctrl 键。

    ../../../_images/south_poles_wfs.png
  12. 单击 添加

    加载图层可能需要一段时间。加载后它们将出现在地图上,显示南极洲的轮廓和几个点。

    ../../../_images/antarctica_border.png

    这与使用WMS图层有什么不同呢?

  13. 选择任意图层,您都会注意到要素选择和属性表工具已启用。这些是矢量图层。

  14. 选择 south_poles_wfs 图层并打开其属性表。您应该看到以下内容:

    ../../../_images/poles_attribute_table.png

    由于这些点具有属性,我们可以为其添加标注,并更改符号。下面是一个例子:

    ../../../_images/labelling_example.png

与WMS图层的差异

Web要素服务返回图层本身,而不仅仅是从图层渲染的地图。这使您可以直接访问数据,并可以更改其符号并运行分析功能。然而,这是以传输大量数据为代价的。如果正在加载的图层具有复杂的形状、大量属性或许多要素,这一点尤其明显;或者即使只是加载了很多图层。因此,WFS图层通常需要很长时间才能加载完毕。

10.2.2. ★★☆ Follow Along: Querying a WFS Layer

虽然可以在加载WFS图层后进行查询,但在加载之前对其查询通常更有效。这样,只需请求所需的要素,这意味着您使用的带宽要少得多。

例如,在我们目前使用的WFS服务器中,有一个名为 countries (不包括南极洲) 的图层。比如,我们想知道南非相对于已经加载的 south_poles_wfs 图层 (可能还有 antarctica_country_border 图层) 的位置。

有两种方法可以做到。加载整个 countries ... 图层,然后在加载后像往常一样构建查询。然而,传输世界上所有国家的数据,然后只使用南非的,似乎有点浪费带宽。根据您的连接,加载此数据集可能需要几分钟。

另一种方法是从服务器加载图层之前将查询构建为过滤器。

  1. Data Source Manager 对话框中启用 WFS / OGC API 要素 选项卡

  2. 连接到我们之前使用的服务器,您应该会看到可用图层的列表。

  3. 查找并双击 countries (不包括南极洲) 图层。图层名为 country_borders_excluding_antarctica 。也可以选择图层,然后按对话框底部的 构建查询 按钮:

    ../../../_images/select_country_filter.png
  4. 在出现的对话框的 SQL语句 框中键入以下 SELECT * FROM country_borders_excluding_antarctica WHERE "Countryeng" = 'South Africa' 查询内容。

    ../../../_images/country_sa_builder.png
  5. 确定

  6. 使用的表达式将显示为目标图层的 Sql 值:

    ../../../_images/country_filter_enabled.png
  7. 单击 添加 选中的如上所示图层。只有 Countryeng 值为 South Africa 的国家才能从该图层加载:

    ../../../_images/antarctica_sa.png

    您注意到 country_borders_excluding_antarctica 图层旁边的 indicatorFilter 图标了吗?它表示加载的图层已过滤,不会在工程中显示其所有要素。

  8. 您不必这么做,但是如果尝试了这两种方法,会注意到这比在过滤所有国家之前加载数据要快得多!

关于WFS有效性的说明

如果需求非常具体,那么很难找到您需要的WFS托管要素。Web要素服务相对较少的原因是:为了描述整个要素,必须传输大量数据。因此,相对于WMS仅发送图像而言,托管WFS并不是很划算。

所以,您遇到最常见的WFS类型可能是在本地网络,甚至是在您自己的计算机中,而不是在互联网上。

10.2.3. In Conclusion

如果需要直接访问图层的属性和几何图形,WFS图层优于WMS图层。然而,考虑到需要下载的数据量 (这会导致速度问题,也会缺乏易于使用的公共WFS服务器),并不总是可以使用WFS而不是WMS。

10.2.4. What's Next?

接下来,您将看到如何使用QGIS服务器提供OGC服务。