目录

上一主题

10.1. 合并矢量图层

下一主题

10.3. 使用点或多边形对影像资料取样


本教程由OSGeo中国中心维护。

10.2. 邻近分析

GIS 非常适合用于分析要素的空间关系。这些分析的其中之一是为特定的要素寻找最接近的另一个要素, 这时 QGIS 的距离矩阵 Distance Matrix 工具就可以派上用场。 在本教学中,我们会使用 2 个资料集,并且寻找这两个图层中,哪些点彼此最为靠近。 我们已有许多重要地震的位置,现在要找出这些离地震最近的人口聚居地。

我们这里要使用的数据是“全球重大地震”为了方便起见,你也可以直接用下面的连结下载这两份资料集:

http://www.qgistutorials.com/downloads/signif.txt

http://www.qgistutorials.com/downloads/ne_10m_populated_places_simple.zip

10.2.1. 分析步骤

1. 打开 QGIS,我先下载"TEXT"文件,选择 Layer ‣ Add Layer ‣ Add Delimited Text Layer , 然后选择刚下载的"signif.txt"。这个文件是"tab-delimited file", 所以我们可以在 File format 栏位 选择 Tab ,程序会自动选择 X fieldY field 栏位, 所以按下 Add 即可。如 图 10.4 。可能你会看到 QGIS 显示读取文件的时候 出现了一些错误,这是由于文件中的某些值异常所引起的,这些异常的资料不会被读取。在本教学中, 我们就先忽略这些错误。

_images/2_xsg.png

图 10.4 Delimited Text设置

2. 由于地震资料采用经纬度座标,输入的 CRS 应该会采用 EPSG: 4326 ,可在视窗右下角检查是否正确。 接下来来开启人口聚居地图层,选择 Layer ‣ Add Layer ‣ Add Vector Layer 。 选择刚下载的"ne_10m_populated_places_simple.zip"并按下 Add 。稍微缩放一下浏览这两个数据。 我们可以看到每个绿色的点都是一个重要地震,而每个黄色的点都是一个人口聚居地(你的点颜色可能会不同, 请对照图层各自的名字)。我们要做的是为每个地震点找出最接近的人口聚居地,如 图 10.5

_images/5_xhq.png

图 10.5 加载后结果

3. 接下来进行分析,首先选择 Vector ‣ Analysis Tools ‣ Distance Matrix 。 在"Distance Matrix"视窗中,"Input point layer"选择 "signif", "Target point layer"选择"ne_10m_populated_places_simple" 此外,在"Input unique ID field"中我们选"I_D"(每个点的此栏位值都不相同),输出档将会依照此栏位显示。在此例中, 我们只要寻找最接近的 1个点,所以要勾选 仅使用最邻近(k)目标点,然后输入"1",把输出档命名为"matrix.csv", 然后按下确定。程序执行完毕后,点选 Close 。如 图 10.6

备注

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

_images/7_x01.png

图 10.6 Distance Matrix设置

8. 程序执行完毕后,在 Distance Matrix 视窗点选 Close 。现在你可以使用 Notepad 或 任何的文字编辑器浏览 "matrix.csv"。GIS 也可以把此文件汇入,这样就可以把结果加到 QGIS 中浏览了。 如果在 Distance Matrix 视窗中"Open output file after running algorithm"勾选则在QGIS中会直接打开, 如果没有勾选,选择 Layer ‣ Add Layer ‣ Add Delimited Text Layer... 。 如 图 10.7

_images/8_xds.png

图 10.7 点击Delimited Text

9. 选择刚刚产生的新文件"matrix.csv",因为它只包含了文字的栏位,所以要在 Geometry definition 选项中 勾选 No geometry (attribute only table) ,按下 OK 。如 图 10.8

_images/9_xl1.png

图 10.8 Delimited Text设置

10. 现在此 CSV 文件已以表格的形式汇入 QGIS 中。在这个表格上按右键,选择 Open Attribute Table , 如 图 10.9

_images/10_xnt.png

图 10.9 查看属性

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

备注

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

_images/11_x3i.png

图 10.10 查看属性

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

_images/12_xnl.png

图 10.11 点击Properties

13.前往 Joins 的分页,按下 + 按钮,如 图 10.12

_images/13_xat.png

图 10.12 Joins界面

14. 我们要作的是连接我们的分析结果到此图层上,所以必须要为两个表格各选择一个能够连接起来(具有相同数值)的 字段。为连结 Join layer 图层选择"matrix"再为连结 Join field 选择"InputID" 而 Target field 就选择 "I_D"。其他选项使用预设值,最后按下 OK 。 如 图 10.13

_images/14_xz5.png

图 10.13 Joins连接

  1. Joins 的分页中, 就出现了显示连接设置。按下 OK 。如 图 10.14

_images/15_x8q.png

图 10.14 连接后结果

  1. 现在在"signif"图层上按右键选 Open Attribute Table ,如 图 10.15

_images/16_xau.png

图 10.15 查看属性

  1. 现在每个地震的要素,都多了新属性显示最近的 (人口聚居地) 点图征,以及其距离,如 图 10.16

_images/17_xs1.png

图 10.16 查看属性

18. 接下来我们要来看看怎么可视化这些结果。首先,我们要另存新图层,把资料表连接的结果永久保存下来。 以右键点选"signif",然后选择 Export --> Save Feature As... ,如 图 10.17

_images/18_x18.png

图 10.17 另存为新图层

19. 在 File name 栏位侧边的 ... 钮,把新文件命名为"earthquake_with_places.shp"。 确认一下 Add saved file to map 中有开启,最后按下 OK ,如 图 10.18

_images/19_xzp.png

图 10.18 另存为新图层

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

_images/20_xsg.png

图 10.19 点击Properties

21. 在 Soure 中找到 Feature subset 的栏位,选择 Query Builder , 如 图 10.20

_images/21_xfo.png

图 10.20 Soure设置

22. 本教学中,我们要把焦点放在墨西哥附近的地震和人口聚居地。在 Query Builder 中输入以下的表达式, 如 图 10.21

"COUNTRY" = 'MEXICO'
_images/22_xav.png

图 10.21 Query Builder设置

23. 可以看到在 QGIS 视窗中,只剩下落在墨西哥境内的地震会显示。接下来对人口聚居地的层进行相同操作, 在"ne_10m_populated_places_simple"上以右键点选进入 Properties ,如 图 10.22

_images/23_x3u.png

图 10.22 点击Properties

  1. Soure 中,开启 Query Builder ,输入以下的表达式,如 图 10.23

"adm0name" = 'Mexico'
_images/24_x7n.png

图 10.23 Query Builder设置

25. 资料呈现的准备已经完成。我们接下来要使用一个称为 MMQGIS 的核心附加元件进行安装安装后, 选择 MMQGIS ‣ Create ‣ Hub Lines ,如 图 10.24

_images/25_xp6.png

图 10.24 点击Hub Lines

26. 在 Hub Point Layer 选"ne_10m_populated_places_simple",在 Hub ID Attribute 选择 "name",在 Spoke Point Layer 选择"earthquake_with_places",在 Spoke Hub ID Attribute 选择 与QGIS里相同文档的文件这里是"Distance m"。此程序会借由比对属性栏位值,把每个地震点和最邻近的人口点用线连接起来。 点选 Browse 然后把 Output Shapefile 命名为"earthquake_hub_lines.shp"。 最后按下 OK 开始执行,如 图 10.25

_images/26_x0t.png

图 10.25 Hub Lines设置

  1. 程序可能会花几分钟的时间。你可以在 QGIS 萤幕左下角看到目前进度,如 图 10.26

_images/27_xat.png

图 10.26 运行Hub Lines

28. 处理结束后,"earthquake_hub_lines"图层会载到 QGIS 中,可以看到现在每个地震都附带一条线, 连接到最接近的人口聚居地,如 图 10.27

_images/28_xp0.png

图 10.27 Hub Lines结果