空间连接

空间连接是个经典的 GIS 课题:如何基于空间关系,把相关属性值从一个图层转到另一个图层?在 QGIS 中,有个称为 Join Attributes by Location 的工具,可以实现此一功能。

内容说明

我们要使用 2 个图层,分别为纽约市邻里的边界,以及纽约市护理之家的所在地。最终目标是使用空间连接,找出每个区的护理之家的总乘载人数。

你还会学到这些

  • 从图层的属性表格中删除整栏

取得资料

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

  1. 你可以使用介面上的 Export 钮下载 Borough Boundaries 的 zip 档。
../_images/1102.png
  1. 使用介面上的 Export 钮下载 Nursing Homes 的 zip 档。
../_images/240.png

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

nybb_12c.zip

OEM_NursingHomes_001.zip

操作流程

  1. 选择:menuselection:Layer –> Add Vector Layer. 选择刚才下载的 ``nybb_12c.zip``然后按:guilabel:Open
../_images/327.png
  1. 选择 nybb.shp 图层并点选 OK
../_images/419.png
  1. 对另一个档案``OEM_NursingHomes_001.zip``重复步骤 3 与 4,载入``OEM_NursingHomes_001.shp`` 图层。两个图层都载入后,右键点选``OEM_NursingHomes_001`` 图层然后选择 Open Attribute Table
../_images/520.png
  1. 查阅每个图征的属性,由于我们要计算的是每个区护理之家的总承载人数,因此我们可使用 Capacity (乘载人数)属性来连接行政区的边界图层。
../_images/619.png
  1. 选择:menuselection:Vector –> Data Mangement Tools –> Join attributes by location
../_images/718.png
  1. Target vector layer 是我们要加入新属性的图层,因此在本教学中为区边界的 nybb layer。而:guilabel:Join vector layer 则是护理之家的分布图层``OEM_NursingHomes_001`` 。 由于我们想要把所有在同一区的护理之家乘载人数加总, 因此请选择:guilabel:Take summary of intersecting features 然后选择:guilabel:Sum.输出档命名为 nyc_borough_join.shp,在:guilabel:Output table 一栏中,选择 Keep all records`
../_images/817.png

9. 处理结束时,程序会问你要不要把图层加入 TOC (QGIS 主视窗),选择 Yes。新的图层 nyc_borough_join 含有从``nybb`` 复制过来的图征,而且属性已与``OEM_NursingHomes_001`` 连接完成。右键点选新图层,选择 Open Attribute Table

../_images/915.png
  1. 可以看到属性表中出现了新的栏位**SUMCapacit** i,这就是原本属于同一区的护理之家的 Capacity 属性加总。
../_images/1016.png
  1. 我们已经找到想要的资讯了,但是在输出中还存在着其他我们不需要的栏位,让我们来清理一下。点选:guilabel:Toggle editing 然后选择 删除栏:guilabel:`Delete column`按钮。
../_images/1120.png
  1. 在:guilabel:Delete Attributes 视窗中按下:kbd:Control-A. 以选择所有栏位,然后按住:kbd:Control 键,取消选取你想保留的属性,最后按下:guilabel:OK
../_images/1218.png
  1. 回到属性表格,再次按下 Toggle editing 以储存刚才的更动。
../_images/1316.png
  1. 回到 QGIS 主画面中,我们可以使用 Identify 工具,验证输出档中每个区的图征只具有我们想要的属性。
../_images/1415.png