10.2. Lesson: Web要素服务

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

The goal for this lesson: 使用WFS并了解它与WMS的区别。

10.2.1. 基本信息 Follow Along: Loading a WFS Layer

  1. 开始一张新地图。这是出于演示目的,不会保存。

  2. 单击 DataSourceManager Open Data Source Manager 纽扣。

  3. 启用 WFS WFS / OGC API - Features 标签。

  4. 单击 New 纽扣。

  5. 在出现的对话框中,输入 Name AS nsidc.org 以及 URL AS https://nsidc.org/cgi-bin/atlas_south?version=1.1.0

    ../../../_images/new_wfs_connection.png
  6. 单击 OK ,新连接将出现在您的 Server connections

  7. 单击 Connect 。将显示可用层的列表:

    ../../../_images/wfs_connection_layers.png
  8. 取消选中 Only request features overlapping the view extent 选择下面的层列表,因为您当前的地图画布可能没有覆盖我们感兴趣的区域:南极洲。

  9. 找到该层 antarctica_country_border 。您可以使用 Filter 盒子在最上面。

  10. 单击层以将其选中:

  11. 同时查找并选择该层 south_poles_wfs 。你可能需要等一下 Ctrl

    ../../../_images/south_poles_wfs.png
  12. 单击 Add

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

    ../../../_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 (excluding Antarctica) 。比方说,我们想知道南非相对于 south_poles_wfs 层(也许还包括 antarctica_country_border 层),它已经被加载。

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

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

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

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

  3. 找到并双击 countries (excluding Antarctica) 一层。层名称为 country_borders_excluding_antarctica 。您也可以选择该层,然后按 Build query 对话框底部的按钮:

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

    ../../../_images/country_sa_builder.png
  5. 新闻发布会 OK

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

    ../../../_images/country_filter_enabled.png
  7. 单击 Add 选择了如上所示的层。只有一个国家拥有 Countryeng 的价值 South Africa 将从该层加载:

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

    你有没有注意到 指示器过滤器 图标旁边的 country_borders_excluding_antarctica 层次感?这表示载入的层已被过滤,并且不会在项目中显示其所有要素。

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

关于WFS可用性的说明

如果您的需求非常具体,则很少能找到托管您所需功能的WFS。Web Feature Services之所以相对较少,是因为描述整个功能需要传输大量数据。因此,托管WFS而不是只发送图像的WMS并不划算。

因此,您将遇到的最常见的WFS类型可能是在本地网络上,甚至是在您自己的计算机上,而不是在Internet上。

10.2.3. In Conclusion

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

10.2.4. What's Next?

接下来,您将了解如何使用QGIS Server提供OGC服务。