近邻分析

警告

This tutorial is now obsolete. A new and updated version is available at 近邻分析 (QGIS3)

GIS 非常适合用于分析图征的空间关系。这些分析的其中之一是为特定的图征寻找最接近的另一个图征,这时 QGIS 的距离矩阵(Distance Matrix)工具就可以派上用场。在本教学中,我们会使用 2 个资料集,并且寻找这两个图层中,哪些点彼此最为靠近。

内容说明

我们已有许多重要地震的位置,现在要找出这些离地震最近的人口聚居地。

你还会学到这些

  • 如何在 QGIS 中操作资料表连结 (如需更多介绍请看 资料表连接)

  • 使用 查询建构器 来显示图层中的次群组

  • 使用 MMQGIS 附加元件画出枢纽线以呈现近邻分析的结果

取得资料

这里我们要使用 NOAA 的美国国立地球物理资料中心(NGDC)的 Significant Earthquake Database,内含所有的全球重大地震。下载 地震资料的 tab 分隔档

Natural Earth 上有不错的 `人口居住地 资料库,`其中也有 `简化版 (栏位较少) 的资料库<http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places_simple.zip>`_

为了方便起见,你也可以直接用下面的连结下载这两份资料集:

`signif.txt <http://www.qgistutorials.com/downloads/signif.txt>

ne_10m_populated_places_simple.zip

资料来源 [NGDC] [NATURALEARTH]

操作流程

  1. 打开 QGIS,选择 图层 ‣ 加入分隔文字图层,然后选择刚下载的 signif.txt

../_images/1169.png
  1. 这个档案是 Tab 分隔档,所以我们可以在 档案格式 栏位选择 定位键。程式会自动选择 XY 栏位,所以按下 确定 即可。

注解

可能你会看到 QGIS 显示读取档案的时候出现了一些错误,这是由于档案中的某些值异常所引起的,这些异常的资料不会被读取。在本教学中,我们就先忽略这些错误没关系。

../_images/2129.png
  1. 由于地震资料采用经纬度座标,输入的 CRS 应该会采用 EPSG: 4326,可在视窗右下角检查是否正确。接下来来开启人口聚居地图层,选择 图层 ‣ 加入向量图层

../_images/369.png
  1. 选择刚下载的 ne_10m_populated_places_simple.zip 并按下 确定

../_images/449.png
  1. 稍微缩放一下浏览这两个资料库。每个紫色的点都是一个重要地震,而每个蓝色的点都是一个人口聚居地(译按:你的点颜色可能会不同,请对照图层各自的名字)。我们要做的是为每个地震点找出最接近的人口聚居地。

../_images/549.png
  1. 选择 向量 ‣ 分析工具 ‣ 距离矩阵

../_images/647.png
  1. 在开启的视窗中,「输入点图层」选择 signif,「目标点图层」选择 ne_10m_populated_places_simple。此外,我们还要为这两个图层选择一个「唯一ID栏位」(每个点的此栏位值都不相同),输出档将会依照此栏位显示。在此例中,我们只要寻找最接近的 1 个点,所以要勾选 仅使用最邻近(k)目标点,然后输入 1。把输出档命名为 matrix.csv,然后按下确定。程式执行完毕后,点选 关闭

注解

有件事值得一提:你可以只针对单一图层执行近邻分析,只需要把输入点图层和目标点图层都设为相同图层即可。输入就会是在 1 个图层中的点的近邻结果。

../_images/746.png
  1. 程式执行完毕后,在 距离矩阵 视窗点选 关闭。现在你可以使用 Notepad 或任何的文字编辑器浏览 matrix.csv。QGIS 也可以把此档案汇入,这样就可以把结果加到 QGIS 中浏览了。选择 图层 ‣ 加入分隔文字图层

../_images/845.png
  1. 选择刚刚产生的新档案 matrix.csv,因为它只包含了文字的栏位,所以要在 几何栏位定义 选项中勾选 无几何栏位 (仅产生属性表格)。按下 确定

../_images/944.png
  1. 现在此 CSV 档案已以表格的形式汇入 QGIS 中。在这个表格上按右键,选择 开启属性表格

../_images/1043.png
  1. 现在就可以看到近邻分析的结果了。InputID 栏位是从地震的图层过来的,TargetID 则是从人口聚居地的图层过来的,代表距离地震最近的人口聚居点。Distance 则是 2 个点的距离。

注解

这里距离的计算是使用图层的 CRS,也就是说因为我们的来源图层是经纬度座标,输入距离的单位也会是角度。如果你想要把距离用公尺呈现,在执行近邻分析之前,要先重投影输入的图层。

../_images/1170.png
  1. 本结果已相当接近我们想要的样子。对某些使用者来说,得到一张表格已显足够;然而,我们可以把结果进一步连接到原本的地震图层属性表格上。以右键点选地震图层,选择 属性

../_images/1244.png
  1. 前往 连结(Joins)的分页,按下 + 按钮。

../_images/1441.png
  1. 我们要作的是连接我们的分析结果到此图层上,所以必须要为两个表格各选择一个能够连接起来(具有相同数值)的栏位。为 连结(Join)图层 选择 matrix,再为 连结栏位 选择 InputID,而 目标栏位 就选择 I_D。其他选项使用预设值,最后按下 确定

../_images/1441.png
  1. 连结(Joins)的分页中,就出现了一笔连接资讯。按下 确定

../_images/1540.png
  1. 现在在 signif 图层上按右键选 开启属性表格

../_images/1636.png
  1. 现在每个地震的图征,都多了新属性显示最近的 (人口聚居地) 点图征,以及其距离。

../_images/1733.png
  1. 接下来我们要来看看怎么视觉画这些结果。首先,我们要另存新图层,把资料表连接的结果永久保存下来。以右键点选 signif 然后选择 存档为…

../_images/1833.png
  1. 点选在 另存为 栏位侧边的 浏览 钮,把新档案命名为 earthquake_with_places.shp,确认一下 加入储存档案至地图中 有开启,最后按下 确定

../_images/1927.png
  1. 新图层载入后,就可以把 signif 图层取消勾选以隐藏起来。由于本资料集相当大,所以我们可以先对资料集的一部分进行视觉化试试看。QGIS 可以让你不用另存新档或汇入新图层,就载入某个图层的子集。在 earthquake_with_places 上以右键点选进入 属性

../_images/2020.png
  1. 在「一般」分页中,找到 Feature subset (或 Provider feature filter)的栏位,选择 查询建构器

../_images/2130.png
  1. 本教学中,我们要把焦点放在墨西哥附近的地震和人口聚居地。因此,请在 查询建构器 中输入以下的表达式。

"COUNTRY" = 'MEXICO'
../_images/2222.png
  1. 可以看到在 QGIS 视窗中,只剩下落在墨西哥境内的地震会显示。接下来对人口聚居地的层进行相同操作,在 ne_10m_populated_places_simple 上以右键点选进入 属性

../_images/2319.png
  1. 在「一般」分页中,开启 查询建构器,输入以下的表达式。

"adm0name" = 'Mexico'
../_images/2418.png
  1. 资料呈现的准备已经完成。我们接下来要使用一个称为 MMQGIS 的核心附加元件,可参考 使用附加元件 进行搜寻及安装等相关操作。安装后,选择 MMQGIS ‣ Create ‣ Hub Lines

../_images/2517.png
  1. Hub Point Layer 栏位选择 ne_10m_populated_places_simpleHub ID Attribute 栏位选 nameSpoke Point Layer 栏位选择 earthquake_with_placesSpoke Hub ID Attribute 栏位选择 matrix_Tar。此程式会借由比对属性栏位值,把每个地震点和最邻近的人口点用线连接起来。点选 Browse 然后把 Output Shapefile 命名为 earthquake_hub_lines.shp,最后按下 确定 开始执行。

../_images/2615.png
  1. 程式可能会花几分钟的时间。你可以在 QGIS 萤幕左下角看到目前进度。

../_images/2715.png
  1. 处理结束后,earthquake_hub_lines 图层会载到 QGIS 中,可以看到现在每个地震都附带一条线,连接到最接近的人口聚居地。

../_images/2813.png