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 文件。

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

操作步骤¶
- 在 QGIS 浏览器中找到
nybb_19a.zip文件并展开。选择nybb_19a/nybb.shp图层并将其拖到画布上。这是一个表示纽约市行政区边界的多边形图层。
- 接下来,找到
V_SSS_SEGMENTRATING_1.zip文件并展开。选择dot_V_SSS_SEGMENTRATING_1_20190129.shp图层并将其添加到画布。这是纽约市所有街道的线图层。
- 让我们检查一下
dot_V_SSS_SEGMENTRATING_1_20190129图层每个要素可用的属性。右键单击并选择"打开属性表"。
- 您会注意到名为
Rating_B的属性,其值在 0-10 范围内,代表街道路段的评级。RatingWord属性具有描述性评级。我们可以使用Rating_B字段来计算平均评级。
- 您可能已经注意到,有些要素的评级为
NR。这些是未评级的路段。将它们包含在我们的分析中是不正确的。在进行空间连接之前,让我们设置一个过滤器来排除这些记录。右键单击dot_V_SSS_SEGMENTRATING_1_20190129图层并选择"过滤器"。
- 在"查询构建器"中,输入以下表达式以选择所有评级不为
NR的记录。您也可以通过单击"字段"、"运算符"并选择适当的值来交互式地构建表达式。点击"确定"。
bash "RatingWord" != 'NR'
- 您会注意到
dot_V_SSS_SEGMENTRATING_1_20190129图层现在有一个过滤器图标,表明该图层应用了一个活动过滤器。现在我们可以使用此图层进行空间连接。转到"处理" ‣ "工具箱"。
- 搜索并找到"矢量常规" ‣ "按位置连接属性(汇总)"算法。双击启动它。
- 在"按位置连接属性(汇总)"对话框中,选择
nybb作为"输入图层"。街道图层dot_V_SSS_SEGMENTRATING_1_20190129将作为"连接图层"。您可以将"几何谓词"保留为默认的相交。单击"要汇总的字段"旁边的 … 按钮。
注意
一个提示,帮助您选择正确的输入和连接图层:输入图层是在空间连接中将被修改并添加新属性的图层。由于我们希望将平均评级字段添加到行政区图层,所以它将是输入图层。
- 选择
Rating_B并点击"确定"。
- 同样地,单击"要计算的总计"旁边的 … 按钮。
- 选择
平均值作为汇总运算符,然后点击"确定"。现在我们可以开始处理了。点击"运行"。
- 处理算法将遍历要素并应用空间连接。验证处理作业是否成功,然后单击"关闭"。
- 回到主 QGIS 窗口,您会看到一个新的
Joined layer图层已添加到画布。打开此图层的属性表。您将看到输入行政区图层中添加了一个新列Rating_B_mean,其中包含了与该要素相交的所有街道的平均评级。
- 现在我们可以执行反向操作。有时,您的分析需要基于空间关系从另一个图层获取属性,但不计算任何汇总。对于此类分析,我们可以使用
按位置连接属性算法。任务是基于每个街道要素与哪个行政区多边形相交,将行政区的名称添加到街道图层的每个要素中。在运行此算法之前,让我们从dot_V_SSS_SEGMENTRATING_1_20190129图层中移除过滤器。点击过滤器图标,在"查询构建器"中按"清除"。点击"确定"。
- 在"图层"面板中关闭
Joined layer。在"处理工具箱"中找到"矢量常规" ‣ "按位置连接属性"算法,双击启动。
- 选择
dot_V_SSS_SEGMENTRATING_1_20190129作为"输入图层",nybb作为"连接图层"。您可以将"几何谓词"保留为默认的相交。单击"要添加的字段"旁边的 … 按钮,选择BoroName。点击"确定"。
- 街道线段可能跨越行政区边界,因此我们选择"连接类型"为
为每个定位到的要素创建独立要素(一对多)。点击"运行"。
- 处理完成后,打开新添加的
Joined layer的属性表。您会看到每个街道要素都添加了一个新的BoroName属性。
如果您想提供反馈或分享您对本教程的体验,请在下方留言。(需要 GitHub 账户)


















