Skip to content

title: Mastering Spatial Joins in QGIS3: Average Ratings and Attribute Transfer description: Learn to perform spatial joins in QGIS3 with practical examples. Calculate average street ratings per NYC borough and add borough names to street features using step-by-step tutorials, data filtering, and QGIS processing tools. keywords: spatial join, QGIS3, GIS, data analysis, tutorial


16_执行空间连接 QGIS3

原文链接: https://www.qgistutorials.com/en/docs/3/performing_spatial_joins.html

执行空间连接 (QGIS3)

空间连接是一个经典的 GIS 问题——基于图层之间的空间关系将一个图层的属性传递到另一个图层。在 QGIS 中,可以通过 按位置连接属性 处理算法来实现此功能。

任务概述

我们将使用两个图层——纽约市行政区边界的 Shapefile 和纽约市所有街道的人行道评级 Shapefile。第一个任务是通过使用带汇总算法的空间连接,找出每个行政区街道的平均评级。第二个任务是通过一对多空间连接,将行政区的名称添加到街道要素中。

您将学到的其他技能

  • 创建过滤器以临时将某些要素排除在计算之外。

获取数据

NYC Open Data Portal 是纽约市免费数据的绝佳来源。

通过门户网站上的"导出"选项下载 行政区边界 zip 文件。

../../_images/data116.png

通过门户网站上的"导出"选项下载 街道铺面评级 zip 文件。

../../_images/data26.png

操作步骤

  1. 在 QGIS 浏览器中找到 nybb_19a.zip 文件并展开。选择 nybb_19a/nybb.shp 图层并将其拖到画布上。这是一个表示纽约市行政区边界的多边形图层。

../../_images/1135.png

  1. 接下来,找到 V_SSS_SEGMENTRATING_1.zip 文件并展开。选择 dot_V_SSS_SEGMENTRATING_1_20190129.shp 图层并将其添加到画布。这是纽约市所有街道的线图层。

../../_images/2107.png

  1. 让我们检查一下 dot_V_SSS_SEGMENTRATING_1_20190129 图层每个要素可用的属性。右键单击并选择"打开属性表"。

../../_images/350.png

  1. 您会注意到名为 Rating_B 的属性,其值在 0-10 范围内,代表街道路段的评级。RatingWord 属性具有描述性评级。我们可以使用 Rating_B 字段来计算平均评级。

../../_images/427.png

  1. 您可能已经注意到,有些要素的评级为 NR。这些是未评级的路段。将它们包含在我们的分析中是不正确的。在进行空间连接之前,让我们设置一个过滤器来排除这些记录。右键单击 dot_V_SSS_SEGMENTRATING_1_20190129 图层并选择"过滤器"。

../../_images/525.png

  1. 在"查询构建器"中,输入以下表达式以选择所有评级不为 NR 的记录。您也可以通过单击"字段"、"运算符"并选择适当的值来交互式地构建表达式。点击"确定"。

bash "RatingWord" != 'NR'

../../_images/625.png

  1. 您会注意到 dot_V_SSS_SEGMENTRATING_1_20190129 图层现在有一个过滤器图标,表明该图层应用了一个活动过滤器。现在我们可以使用此图层进行空间连接。转到"处理" ‣ "工具箱"。

../../_images/724.png

  1. 搜索并找到"矢量常规" ‣ "按位置连接属性(汇总)"算法。双击启动它。

../../_images/824.png

  1. 在"按位置连接属性(汇总)"对话框中,选择 nybb 作为"输入图层"。街道图层 dot_V_SSS_SEGMENTRATING_1_20190129 将作为"连接图层"。您可以将"几何谓词"保留为默认的 相交。单击"要汇总的字段"旁边的 … 按钮。

../../_images/924.png

注意

一个提示,帮助您选择正确的输入和连接图层:输入图层是在空间连接中将被修改并添加新属性的图层。由于我们希望将平均评级字段添加到行政区图层,所以它将是输入图层。

  1. 选择 Rating_B 并点击"确定"。

../../_images/1031.png

  1. 同样地,单击"要计算的总计"旁边的 … 按钮。

../../_images/1136.png

  1. 选择 平均值 作为汇总运算符,然后点击"确定"。现在我们可以开始处理了。点击"运行"。

../../_images/1232.png

  1. 处理算法将遍历要素并应用空间连接。验证处理作业是否成功,然后单击"关闭"。

../../_images/1330.png

  1. 回到主 QGIS 窗口,您会看到一个新的 Joined layer 图层已添加到画布。打开此图层的属性表。您将看到输入行政区图层中添加了一个新列 Rating_B_mean,其中包含了与该要素相交的所有街道的平均评级。

../../_images/1428.png

  1. 现在我们可以执行反向操作。有时,您的分析需要基于空间关系从另一个图层获取属性,但不计算任何汇总。对于此类分析,我们可以使用 按位置连接属性 算法。任务是基于每个街道要素与哪个行政区多边形相交,将行政区的名称添加到街道图层的每个要素中。在运行此算法之前,让我们从 dot_V_SSS_SEGMENTRATING_1_20190129 图层中移除过滤器。点击过滤器图标,在"查询构建器"中按"清除"。点击"确定"。

../../_images/1523.png

  1. 在"图层"面板中关闭 Joined layer。在"处理工具箱"中找到"矢量常规" ‣ "按位置连接属性"算法,双击启动。

../../_images/1621.png

  1. 选择 dot_V_SSS_SEGMENTRATING_1_20190129 作为"输入图层",nybb 作为"连接图层"。您可以将"几何谓词"保留为默认的 相交。单击"要添加的字段"旁边的 … 按钮,选择 BoroName。点击"确定"。

../../_images/1723.png

  1. 街道线段可能跨越行政区边界,因此我们选择"连接类型"为 为每个定位到的要素创建独立要素(一对多)。点击"运行"。

../../_images/1820.png

  1. 处理完成后,打开新添加的 Joined layer 的属性表。您会看到每个街道要素都添加了一个新的 BoroName 属性。

../../_images/1917.png


如果您想提供反馈或分享您对本教程的体验,请在下方留言。(需要 GitHub 账户)