空间查询

警告

This tutorial is now obsolete. A new and updated version is available at 执行空间查询(QGIS3)

空间查询是许多种 GIS 分析技巧的核心。在 QGIS 中,这个功能可以透过 Spatial Query 这个附加元件来达成。

内容说明

我们使用的 2 个资料库分别为河流的线图层以及城市的点图层,要做的事情是寻找所有与河流的距离小于 10 公里的城市。

你还会学到这些

  • 在 QGIS 中直接开启 zip 档

  • 选择适合的投影法,重投影向量资料

  • 制作「环域〈buffers〉」

  • 使用类 SQL 的表示法选择图征

  • 把 shapefile 转换为 KML 档

  • 利用 Google Earth 来验证结果

取得资料

我们要使用 Natural Earth 提供的 ne_10m_rivers_lake_centerlines10m_populated_places_simple 这两个资料库。

下载 河流与湖泊中心线

下载 人口居住地

资料来源 [NATURALEARTH]

操作流程

  1. 载好资料以后,打开 QGIS,选择 图层 ‣ 加入图层 ‣ 加入向量图层

../_images/1174.png
  1. 点选 浏览 然后移到你下载资料的地方。

../_images/2133.png
  1. 按住 Shift 键后点选两个 zip 档,全部选起来后按下 开启

../_images/373.png
  1. 你可能需要从 zip 档中选择图层载入,选 ne_10m_rivers_lake_centerlines.shp 然后按下确定

../_images/451.png
  1. 因为我们选了两个压缩档,所以相同步骤要再重复一次。选择 10m_populated_places_simple.shp 然后按下确定

../_images/552.png
  1. 接着 QGIS 中就可以看到这两个图层。

../_images/650.png
  1. 我们的下一步是为点和线图层制作「环域」,它是一种地理预算函数,QGIS 会使用图层的单位计算空间中的任一点到图征的距离,也就是「环域距离」。目前我们的地理座标参考系统 (Geographic CRS)角度作单位,如果我们要使用公尺公里为单位进行分析,可能就不是那么适当。因此,我们必须先使用一个投影座标系统 (Projected CRS)重投影图层。在 10m_populated_places_simple layer 图层上按右键,然后选择 存档为…

../_images/749.png
  1. 储存向量图层为… 的视窗中,按下在 另存为 旁边的 浏览 钮,然后选择输出档的位置。把输出档命名为 populated_places_reprojected.shp,然后按下在 CRS 旁边的 浏览 钮 〈地球图示〉。

../_images/847.png
  1. 现在要选择适合我们目的的 CRS。由于我们要制作环域,方位等距投影应会是最好的投影法,因为此投影法具在投影中心附近有非常准确径向距离。本例中,我们也要选个全球投影,以符合全球性的资料集。在 选择座标参考系统 视窗中,搜寻 world az 后应该就会看到我们要的结果,选择 World_Azimuthal_Equidistant 然后按下 确定

注解

World_Azimuthal_Equidistant 投影只会复盖到投影中心延伸出去 90 度角的地方,由于我们的投影中心会是经度 0 度,所以只有在经度正负 90 度以内的资料点会被转换。

../_images/946.png
  1. 回到 储存向量图层为… 的视窗,勾选 加入储存档案至地图中,然后按下 确定

../_images/1045.png
  1. ne_10m_rivers_lake_centerlines 重复以上操作,把输出档存为 rivers_lake_reprojected.shp

../_images/1175.png
  1. 现在我们在 图层面板 中可以看到 4 个图层,请把原本的图层取消勾选,这样就只有重投影过的图层会显示。不过,重投影的图层目前因为设定的关系,仍然以 Geographic CRS 显示,让我们把此设定关掉吧。点选 专案属性 钮,或是前往 专案 ‣ 专案属性

../_images/1246.png
  1. 专案属性 视窗中 CRS 的分页下,取消 开启即时 CRS 转换 的勾选,然后按下 确定

../_images/1344.png
  1. 回到 QGIS 主视窗,右键点选任一个重投影过的图层,选择 缩放到图层范围

../_images/1443.png
  1. 现在我们就可以看到资料使用图层的 CRS 投影了。接下来就来制作两个资料集的环域,请前往 向量 ‣ 地理运算工具 ‣ 环域(Buffer)

../_images/1541.png
  1. 环域 工具视窗中,选择 populated_places_reprojected 作为输入图层,环域距离输入 10000。注意本 CRS 的单位是公尺,所以 10,000 意味着 10 公里。输出档取名为 populated_places_buffer.shp,然后按下 确定

../_images/1637.png
  1. 环域处理结束后,按下 以加入新建的图层到 QGIS 中。(较新的 QGIS 版本则需要在上一步骤选择。)

../_images/1734.png
  1. rivers_lake_reprojected 图层重复以上步骤,输出档命名为 rivers_lake_buffer.shp

../_images/1834.png
  1. rivers_lake_buffer 图层实际上包含了河流与湖泊,我们的目标只需要用到河流图征,所以我们还要执行一次查询工作,把河流选取起来。在 rivers_lake_buffer 图层上按右键,选择 开启属性表格

../_images/1928.png
  1. 可以看到,featurecla 属性可以利用来作为选择河流图征的工具。请按下 使用表示式选取图征 钮。

../_images/2021.png
  1. 输入表达式 “featurecla” = ‘River’ 然后按下 选取,接着按下 关闭,回到 QGIS 主视窗。

../_images/2134.png
  1. 现在我们可以进行空间查询了。首先你必须要启用 Spatial Query 附加元件才能使用此功能,如需更多细节请查阅 使用附加元件。启用后,前往 向量 ‣ 空间查询 ‣ 空间查询

../_images/2223.png
  1. 我们的查询目标是选择那些自身环域有被河流的环域复盖到(也就是当图征「相交于」)的城市。请确认 选中的图征 旁的方框有被勾选起来,这是确保本查询只会只用到我们之前选择的河流图征。最后按下 套用

../_images/2320.png
  1. 查询完成后,视窗会出现一个新区域,名为 选中的图征。按下 由所选建立图层 钮后,有个新图层就会被加到 QGIS 的图层列表中。最后按下 关闭

../_images/2419.png
  1. 现在你可以缩放到任一区域察看一下结果,可以发现新的图层只包含了与河流环域相交的图征。

../_images/2518.png
  1. 最后,我们应该要随时检查我们的结果,确保分析的过程中并没有出错。有个验证的方法是把结果输出成 KML 档,然后在 Google 地球中读取,这样就可以确认你找到的城市真的距离河流不到 10 公里。请以右键点选图层,选择 存档为…

../_images/2616.png
  1. 储存向量图层为… 的视窗中,需要选择 WGS84 为 CRS,这是 KML 档案格式的需求。把 KML 命名为 cities_near_river.kml

../_images/2716.png
  1. 打开 Google 地球,然后验证这些城市(环域可表达其约略范围)真的非常接近河流。

../_images/2814.png