空间连接 (QGIS3)

空间连接是一个经典的GIS问题-根据属性的空间关系将属性从一层转移到另一层。在 QGIS 中,可以通过 按位置加入属性 处理算法来使用此功能。

内容说明

我们将使用2层-用于纽约市所有自治市镇边界的 shapefile ,以及用于纽约市所有街道的另一个 StreetPavement Rating 的 shapefile 。第一个任务是使用带有汇总算法的空间连接来找到每个行政区街道的平均等级。第二项任务是通过一对多空间连接将自治市镇的名称添加到街道要素中。

你还会学到这些

  • 创建过滤器以从计算中暂时排除某些功能。

取得资料

NYC Open Data Portal 是纽约市不错的免费资料来源。

你可以使用介面上的 Export 钮下载 Borough Boundaries 的 zip 档。

../../_images/data11.png

使用门户网站上的导出选项下载 Street Pavement Rating zip 文件。

../../_images/data2.png

为了方便起见,你也可以直接用下面的连结下载数据集:

nybb_19a.zip

V_SSS_SEGMENTRATING_1.zip

资料来源 [CITYOFNY]

操作流程

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

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

../../_images/249.png
  1. 让我们检查一下 dot_V_SSS_SEGMENTRATING_1_20190129 层的每个功能可用的属性。右键单击并选择 Open Attribute Table

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

../../_images/418.png
  1. 您可能已经注意到某些功能的评级为 NR 。这些是未评级的细分。将它们包括在我们的分析中将是不正确的。在进行空间连接之前,让我们设置一个 过滤器 以排除这些记录。右键单击 dot_V_SSS_SEGMENTRATING_1_20190129 图层,然后选择 Filter

../../_images/518.png
  1. Query Builder 中,键入以下表达式以选择所有未评级为 NR 的记录。您还可以通过以下方式以交互方式构建表达式:单击 FieldOperator 并选择适当的 Value 。点击 OK

"RatingWord" != 'NR'
../../_images/618.png
  1. 您会注意到 dot_V_SSS_SEGMENTRATING_1_20190129 层现在具有一个过滤器图标,指示该层已应用了活动过滤器。现在,我们可以使用此层进行空间连接。转到 Processing ‣ Toolbox

../../_images/717.png
  1. 搜索并找到 Vector general ‣ Join attribute by location (summary) 算法的联接属性。双击以启动它。

../../_images/817.png
  1. Join attribute by location (summary) 对话框中,选择 nybb 作为 Input layer 。街道层 dot_V_SSS_SEGMENTRATING_1_20190129 将成为 Join layer 。您可以将 Geometry predicate 保留为默认的 相交 。 点击 Fields to sumarize 的字段旁边的 按钮。

../../_images/917.png

注解

提示,以帮助您选择正确的输入层和连接层:输入层是将被修改的层,它将在空间连接中添加新属性。 由于我们希望将平均评分字段添加到自治市镇层,因此它将是输入层。

  1. 选择 Rating_B 并单击 OK

../../_images/1017.png
  1. 类似地,点击 Summaries to calculate 旁边的 按钮来计算。

../../_images/1120.png
  1. 选择 均值 作为摘要运算符,然后单击 OK 。现在我们准备开始处理。点击 Run

../../_images/1218.png
  1. 处理算法将处理所有特征并应用空间连接。验证处理作业是否成功,然后单击 Close

../../_images/1317.png
  1. 回到QGIS主窗口中,您将看到一个新的 Joined layer 层添加到画布上。打开此层的属性表。您将看到一个新列 Rating_B_mean 被添加到输入自治市镇层,该列与该要素相交的所有街道的平均评级。

../../_images/1416.png
  1. 现在我们可以执行反向操作。有时,您的分析需要根据空间关系从另一层获取属性,但不计算任何摘要。我们可以使用 按位置加入属性 算法进行此类分析。任务是根据与行政区多边形相交的行政区名称,将行政区名称添加到街道图层中的每个要素。在运行此算法之前,让我们从 dot_V_SSS_SEGMENTRATING_1_20190129 层中删除过滤器。点击过滤器图标,然后 Query Builder 中按 Clear 。 点击 OK

../../_images/1515.png
  1. Layers 面板的 Joined layer 的旋转。在处理工具箱中找到 Vector general ‣ Join attribute by location 算法,然后双击以启动它。

../../_images/1614.png
  1. 选择 dot_V_SSS_SEGMENTRATING_1_20190129 作为 Input layer ,选择 nybb 作为 Join layer 。 您可以将 Geometry predicate 保留为默认的 相交 。单击 Fields to add 旁边的 按钮,然后选择 BoroName 。点击 OK

../../_images/1715.png
  1. 线段可能会跨越自治市镇边界,因此我们选择 :guilabel:Join type 作为 为每个定位的要素创建单独的要素(一对多) 。点击 Run

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

../../_images/1912.png