空间连接 (QGIS3)¶
空间连接是一个经典的GIS问题-根据属性的空间关系将属性从一层转移到另一层。在 QGIS 中,可以通过 按位置加入属性
处理算法来使用此功能。
内容说明¶
我们将使用2层-用于纽约市所有自治市镇边界的 shapefile ,以及用于纽约市所有街道的另一个 StreetPavement Rating 的 shapefile 。第一个任务是使用带有汇总算法的空间连接来找到每个行政区街道的平均等级。第二项任务是通过一对多空间连接将自治市镇的名称添加到街道要素中。
你还会学到这些¶
创建过滤器以从计算中暂时排除某些功能。
取得资料¶
NYC Open Data Portal 是纽约市不错的免费资料来源。
你可以使用介面上的 Export 钮下载 Borough Boundaries 的 zip 档。
使用门户网站上的导出选项下载 Street Pavement Rating zip 文件。
为了方便起见,你也可以直接用下面的连结下载数据集:
资料来源 [CITYOFNY]
操作流程¶
在 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
层的每个功能可用的属性。右键单击并选择 Open Attribute Table 。
您会注意到名为
Rating_B
的属性,该属性的值在0-10范围内,代表该路段的等级。RatingWord
属性具有描述性等级。我们可以使用Rating_B
字段来计算平均评分。
您可能已经注意到某些功能的评级为
NR
。这些是未评级的细分。将它们包括在我们的分析中将是不正确的。在进行空间连接之前,让我们设置一个 过滤器 以排除这些记录。右键单击dot_V_SSS_SEGMENTRATING_1_20190129
图层,然后选择 Filter 。
在 Query Builder 中,键入以下表达式以选择所有未评级为
NR
的记录。您还可以通过以下方式以交互方式构建表达式:单击 Field , Operator 并选择适当的 Value 。点击 OK 。
"RatingWord" != 'NR'
您会注意到
dot_V_SSS_SEGMENTRATING_1_20190129
层现在具有一个过滤器图标,指示该层已应用了活动过滤器。现在,我们可以使用此层进行空间连接。转到 。
搜索并找到
算法的联接属性。双击以启动它。
在 Join attribute by location (summary) 对话框中,选择
nybb
作为 Input layer 。街道层dot_V_SSS_SEGMENTRATING_1_20190129
将成为 Join layer 。您可以将 Geometry predicate 保留为默认的相交
。 点击 Fields to sumarize 的字段旁边的 … 按钮。
注解
提示,以帮助您选择正确的输入层和连接层:输入层是将被修改的层,它将在空间连接中添加新属性。 由于我们希望将平均评分字段添加到自治市镇层,因此它将是输入层。
选择
Rating_B
并单击 OK 。
类似地,点击 Summaries to calculate 旁边的 … 按钮来计算。
选择
均值
作为摘要运算符,然后单击 OK 。现在我们准备开始处理。点击 Run 。
处理算法将处理所有特征并应用空间连接。验证处理作业是否成功,然后单击 Close 。
回到QGIS主窗口中,您将看到一个新的
Joined layer
层添加到画布上。打开此层的属性表。您将看到一个新列Rating_B_mean
被添加到输入自治市镇层,该列与该要素相交的所有街道的平均评级。
现在我们可以执行反向操作。有时,您的分析需要根据空间关系从另一层获取属性,但不计算任何摘要。我们可以使用
按位置加入属性
算法进行此类分析。任务是根据与行政区多边形相交的行政区名称,将行政区名称添加到街道图层中的每个要素。在运行此算法之前,让我们从dot_V_SSS_SEGMENTRATING_1_20190129
层中删除过滤器。点击过滤器图标,然后 Query Builder 中按 Clear 。 点击 OK 。
在 Layers 面板的
Joined layer
的旋转。在处理工具箱中找到 算法,然后双击以启动它。
选择
dot_V_SSS_SEGMENTRATING_1_20190129
作为 Input layer ,选择nybb
作为 Join layer 。 您可以将 Geometry predicate 保留为默认的相交
。单击 Fields to add 旁边的 … 按钮,然后选择BoroName
。点击 OK 。
线段可能会跨越自治市镇边界,因此我们选择 :guilabel:Join type 作为
为每个定位的要素创建单独的要素(一对多)
。点击 Run 。
处理完成后,打开新添加的
Joined layer
的属性表。您将看到每个街道要素中都添加了一个新的BoroName
属性。