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 上找到它。如果我没有 OfficeId 字段,而是在 Employee 和 Office 表中都有一个指定办公室位置的字段,那会怎么样。因此,我的关系数据库将扩展一个运算符,用于验证两个位置是否等效;例如,这两个点之间的笛卡尔距离 是否小于某个小数字。这种空间关系问题出现在各种有趣的问题中。

例如……

我正在与智利的同事合作一个写作项目,探讨与当地水电开发相关的问题。我们希望包含在项目中的一项内容是显示现有水力发电设施位置的地图。除了该地图之外,我们还希望按流域汇总与这些设施相关的信息。流域是排入河流系统并最终流入大海(或可能被陆地包围的另一水体)的陆地区域。流域对于各种土地管理原因非常重要,因为它们倾向于定义生态系统、气候带甚至传统实践区。下图使用 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:按类别统计

例如,我可以看到布埃诺河(“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 (未验证)

© 2025 open-source.net.cn. All rights reserved.