QGIS 空间连接简介

使用 QGIS(一款开源、可扩展、功能丰富的 GIS 工具)开始涉足地理数据分析和可视化。
257 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

QGIS 是一款免费且开源的 地理信息系统 (GIS),它具有可扩展性,可与其他 GIS 互操作,并被大量(包括我)需要分析和可视化地理数据的人使用。它是一个强大的平台,拥有大量的功能,初次接触可能会让人望而生畏。如果您有兴趣涉足地理数据分析和可视化,以下基本技巧将帮助您开始使用 QGIS。

探索空间连接问题

关系数据库用户熟悉表连接的概念,这是一种将一个表中的数据与另一个表中的数据关联起来的方法。例如,假设我有一个列出员工的表(“Employee”)和另一个列出公司分支机构的表(“Office”)。我可以向 Employee 表添加一个值,指示员工工作所在的办公室

Related tables

图 1:相关表

Employee 表中的字段 OfficeId “指向” Office 表中的正确行。在数据库领域,OfficeId 被称为 Office 表中的主键,Employee 表中的外键

由于办公室位于某个位置,因此这里发生了一些空间的事情——我知道办公室的地址,因此例如,我可以在 OpenStreetMap 上找到它。如果我有一个字段指定 Employee 表和 Office 表上的办公室位置,而不是 OfficeId 字段,会怎么样?因此,我的关系数据库将扩展一个运算符,用于验证两个位置是否等效;例如,这两个点之间的笛卡尔距离是否小于某个小数字。这种空间关系问题出现在各种有趣的问题中。

例如……

我正在与智利的同事合作一个写作项目,以探讨与当地水电开发相关的问题。我们希望包含在项目中的一项内容是显示现有水力发电设施位置的地图。除了该地图之外,我们还希望按流域总结与这些设施相关的信息。流域是排入河流系统并最终流入大海(或可能与陆地隔离的另一水体)的陆地区域。流域对于各种土地管理原因非常重要,因为它们倾向于定义生态系统、气候带,甚至传统实践区。下图使用 QGIS 制作,显示了两个流域的部分区域(以粗蓝色线条划定的区域,蓝色斜体粗体字为它们的名称——Río Itata 和 Río BíoBío)和发电设施(以蓝色菱形符号表示)

Map showing watersheds and generation stations

图 2:感兴趣区域的一部分,显示流域和发电站。地图数据 © OpenStreetMap 贡献者。

与我的关系示例显示两个相关数据表的方式相同,此地图显示了两个空间数据集:流域和水力发电站。流域表示为具有空间范围(或面积)和位置的要素;发电站表示为点,仅具有位置。两个数据集都包含有助于识别数据集中定义的每个要素的属性;例如,流域的名称或发电站产生的电力数量。

假设此摘要任务需要确定每个流域的发电量。一种方法是遍历发电站数据集,并为每个记录分配一个值,该值指向包含该点的流域。我可以手动执行此任务,因为我可以观察到哪些点位于哪些流域内。这非常费力。但是,考虑到这两个数据集已经定义了流域和点的空间性质,并且考虑到 QGIS 可以读取此信息并生成地图,QGIS 可以为我找出这种关系吗?

安装 QGIS

为了使用 QGIS,必须先安装它。各种发行版的存储库中提供的版本可能非常旧,以至于由于插件依赖项与发行版提供的库(例如,Qt 库)之间的不兼容性而无法加载各种有用的插件。

通常有比存储库中版本更新的替代方案。例如,FedoraUbuntu 都提供 GIS 项目,其中包含各种有用的空间分析工具。另一种替代方案是从 QGIS 站点 下载(在我写作时,新的长期发布版本 3.4.4 和之前的长期发布版本 2.18.28 均可用)。以我的经验来看,最好选择新的长期发布版本,以避免类似于存储库中旧版本中的问题。但是,目前在线提供的许多 QGIS 内容都引用了旧版本的 QGIS 2,并且可能需要一些思考才能确定如何在 QGIS 3 中完成操作。

我从 QGIS 站点下载了最新的长期发布版本并启动了它

QGIS on a desktop

图 3:QGIS 在我的桌面上运行

获取数据

我正在使用智利国家资产部 (Ministerio de Bienes Nacionales) IDEChile 网站 Cuencas Banco Nacional de Aguas(国家水库流域)页面上的公开流域数据。要获取数据,我单击标记为 Descargar 的按钮,将数据下载为 .zip 文件,并将文件 (Cuencas_BNA.zip) 解压缩到文件夹中。

水力发电厂数据可从智利能源部 (Ministerio de Energía) IDEEnergía 网站获取,从这个 网络地图页面 开始。在该页面左侧的 Overlays 一词下,我单击“Centrales Generación Eléctrica”链接以展开下面的菜单,该菜单提供更多链接,包括“Hidroeléctricas”。我右键单击该链接以调出包含 Export to SHP 的子菜单

 Ministry of Energy IDE Energía site

图 4:能源部 IDE Energía 网站,显示下载水力发电厂数据的子菜单

当我单击该链接时,它会打开一个表单

Download data collection form

图 5:下载数据收集表单

要激活下载,我需要填写表单的顶部,其中包含我的名字 (Nombre)、姓氏 (Apellidos)、电子邮件地址 (Mail) 和下载原因 (Motivo);我选择了“Investigación”(研究)。当我单击表单右下角的 Descargar 按钮时,数据将以 .zip 文件 (Hidroeléctricas.zip) 的形式到达,我将其解压缩到文件夹中。

准备进行空间连接

我的分析的第一步是使用顶部菜单选择 图层 > 添加图层 > 添加矢量图层,将图层加载到我的 图层 窗口(图 3 的左下角),这将打开数据源管理器

Add Vector Layer data browser

图 6:添加矢量图层数据浏览器

在我查找数据之前,值得解释一下为什么我选择矢量图层而不是其他选项之一。在 GIS 术语中,矢量数据是由点、线或面(以及其他一些专门的数据类型)表示的空间实体。还存在其他类型的空间数据;最值得注意的是栅格数据,它类似于图像,但包含其他信息,例如栅格在地球表面上的位置。本文 简要介绍了该术语。

我的水力发电厂数据被建模为具有属性的点(例如,发电量、电厂名称等)。它以 shapefile 格式存储,shapefile 格式是当今使用的(非常多的)矢量格式之一。请注意,上面的数据源管理器默认为文件格式(shapefile 的正确格式)。我的编码设置为 Latin1,根据我的经验,这是 shapefile 最常见的字符编码。单击矢量数据集旁边的 按钮会打开一个文件浏览器,我可以使用它来查找我的 shapefile。请注意,shapefile 实际上是具有不同三个字母扩展名的文件组:.shp 用于 shapefile 几何数据,.dbf 用于属性,依此类推。要添加我的图层,我选择 XXXX.shp 文件;QGIS 知道将其他文件与此文件关联以创建完整图层。最后,一旦在数据源管理器中标识了源,我就可以单击右下角的“添加”按钮;我的图层将添加到 图层 面板,并且这些点将显示在空间视图面板上

QGIS screen showing the plant layer and the plant positions

图 7:QGIS 屏幕,显示已添加的电厂图层和空间视图面板中的电厂位置

同样,我可以添加流域,流域是面

QGIS screen showing watershed layer covering plant data

图 8:QGIS 屏幕,显示覆盖空间视图面板中电厂数据的流域图层

不幸的是,流域面(上图中的绿色)覆盖了电厂位置,形成了一张非常难看的地图。QGIS 以后进先出的顺序渲染图层,因此要将流域置于电厂位置下方,我可以向下拖动流域图层。我也可以右键单击每个图层,这会给我提供许多选项来更改图层屏幕中显示的名称、更改属性(例如,符号化、标注)、打开属性表等等。

我希望外观更令人赏心悦目,所以我

  1. 添加 OpenStreetMap 图层(在浏览器窗口中 右键单击 > OpenStreetMap);

  2. 重新排列图层,使电厂位于顶部,OpenStreetMap 位于底部(拖动图层以重新排列);

  3. 更改图层上显示的名称(右键单击 > 重命名);

  4. 更改符号系统,使流域面为透明,带有粗蓝色线条,电厂为蓝色菱形(右键单击 > 属性 > 符号系统);

  5. 以蓝色斜体文本标注流域(右键单击 > 属性 > 标注);

  6. 稍微放大一点(使用工具栏上的缩放工具)。

这是结果

Cleaned up symbology and watersheds with labels

图 9:清理后的符号系统和带有标注的流域

好的,现在我可以忍受看地图了,接下来我将进行计算。

进行空间连接

要执行空间连接,请使用顶部菜单的 矢量 > 数据管理工具 > 按位置连接属性,这将弹出以下对话框(我在提供的字段中填写了我想要的值)

Spatial join dialog

图 10:空间连接对话框

我选择了电厂作为 输入图层,流域作为 连接图层,以将流域信息添加到电厂记录中。通过选择 intersects 作为 几何谓词,我计算每个点与之相交的面,或者,由于我们谈论的是点和面,每个点位于其中的面。我对连接的属性使用 “ws” 前缀,并指定一个结果输出图层(在本例中为 shapefile)

Spatial join completed

图 11:空间连接完成

在我关闭对话框后,我可以右键单击图层并选择 打开属性表 来查看 连接图层 的属性,在那里我可以查看连接的属性

Joined-on attributes

图 12:连接的属性流域代码 (wsCOD_CUEN)、名称 (wsNOM_CUEN)、面积 (wsArea_km2)

最后,按流域划分的水力发电量摘要呢?如果我使用像 LibreOffice Calc 这样的电子表格程序,我将使用数据透视表来完成此任务;当然,这是可能的——我可以打开我的 连接图层 的 .dbf 文件。

Calculating group totals: statistics by categories

图 13:计算分组总计:按类别统计

但是 QGIS 有很多分析工具。如果我使用顶部菜单的 处理 项打开 处理工具箱 并搜索“group”,我可以在 矢量分析 中看到工具 按类别统计

Calculating group totals: statistics by categories

图 14:计算分组总计:按类别统计

如果我双击该工具,我会看到

Setting up statistics by categories

图 15:设置按类别统计

我已经选择了 “POTENCIA” 字段(即,兆瓦水力发电潜力)来计算统计数据。我已将字段 “wsNOM_CUEN” 定义为包含我要汇总的类别。单击类别选择器上的 确定,然后单击 运行 会创建一个新的属性表图层,按类别统计,我可以在其上右键单击并选择 打开属性表

Hydroelectric power potential by watershed

图 16:按类别统计

例如,我可以看到布埃诺河 (Bueno River) 流域(“Río Bueno”)已开发的水力发电潜力总和为 185.516 兆瓦。

就这样。回顾一下,我们:学习了如何安装 QGIS;了解了一些关于矢量地理空间数据和对此类数据进行几何运算的知识;创建了空间连接;并使用类似数据透视表的东西分析了空间连接的结果。

标签
Chris Hermansen portrait Temuco Chile
自从 1978 年从不列颠哥伦比亚大学毕业以来,我几乎一直与某种计算机打交道,从 2005 年至今一直是全职 Linux 用户,从 1986 年到 2005 年一直是全职 Solaris 和 SunOS 用户,在那之前是 UNIX System V 用户。

5 条评论

恭喜 Chris,我一直在考虑为 opensource.com 写一篇关于 QGIS 的文章,但你抢先一步。

感谢您的评论,Peter。请随时为 opensource.com 撰写另一篇关于 QGIS 的文章。我计划再写一些。

回复 ,作者:peter_cheer

围绕地图和 GIS 可以做很多很棒的事情,我很高兴在这里看到更多相关内容(当我不为本网站编辑内容时,我是一个不太隐秘的地图爱好者)。我很乐意抛出一些后续内容的想法!

回复 ,作者:clhermansen

您好,

您是否尝试使用虚拟图层进行相同类型的连接?它更面向 SQL,但最终比使用连接 GUI 更强大。

感谢您的评论,VincentP。我没有尝试虚拟图层和连接,但我会根据您的评论尝试!

回复 ,作者:VincentP(未验证)

© . All rights reserved.