把地图数位化

数位化操作是 GIS 专家最常进行的工作之一。把影像资料数位化、转成向量图层常常会花费许多的 GIS 操作时间。不过在 QGIS 中,有着强大的数位化萤幕编修功能,我们将会本教学中做个简介。

内容说明

我们要把一张地形图的图档转化成数个向量图层,内容包括地图中一个公园附近的一些地理标记。

你还会学到这些

  • 为大尺寸影像建立快取金字塔,增快浏览地图的速度

  • Spatialite 资料库的操作

取得资料

我们要使用 Land Information New Zealand (LINZ) 提供的 1:50,000 地形图,包括纽西兰本土与查塔姆群岛(Chatham Islands)。

Christchurch Topo50 map download page 下载 GeoTIFF 影像

为了方便起见,你也可以直接用下面的连结下载(裁切过的版本):

BX24_GeoTifv1-02-clip.tif

资料来源 [LINZ]

操作流程

  1. 选择 图层 ‣ 加入影像图层,选择刚才下载的 BX24_GeoTifv1-02.tif ,然后按 开启

../_images/1153.png
  1. 这是张相当大的影像,当我们要拖曳或是缩放地图时,都要花上一点时间让程式调整影像的解析尺寸。QGIS 提供了简单的解决方法来增进这些动作的速度,称之为「影像金字塔」。这种方法其实就是预先产生不同解析度的相同影像,在地图操作时,可以直接使用而不用再从全尺寸的影像做处理,加快浏览速度。请在 BX24_GeoTifv1-02 图层上按右键选择 属性

../_images/2106.png
  1. 切换到 影像金字塔 分页,在 解析度 栏位中把所有解析度都选取,其他选项使用预设值,然后按 建立快取金字塔。程式执行完毕后,按下 确定

../_images/358.png
  1. 回到 QGIS 主视窗,使用 放大 钮搜寻基督城的 Hagley Park,这就是等一下要数位化的区域。

../_images/440.png
  1. 在开始之前,先来调整预设的 数位化选项。选择 设定 ‣ 选项…

../_images/540.png
  1. 选项 页面中切换到 数位化 分页,预设接合模式 选择 自动接合 转折点与线段。这个选项可以使相近的转折点与线段黏在一起。笔者个人也偏好把 预设接合容许范围编辑转控点的搜寻半径 设成以像素为单位,而非以地图单位为单位,这样在不同的缩放尺度下,自动接合的距离会保持一样。接着你可以依照你萤幕的解析度选择适合的值,最后按下 确定

../_images/638.png
  1. 现在可以开始数位化了!我们先来做个道路的图层,然后把公园附近的道路数位化到此图层上。选择 图层 ‣ 新增图层 ‣ 「新增 Spatialite 图层…」或「新增 Shape 档图层」,看你喜欢哪个都可以。Spatialite 是和 ESRI 的地理资料库(包含 Shapefile)格式相似的开放资料库,它的特点是可以在一个档案内塞进不同种类的空间资料 (点、线、多边形) 与其他种类的图层,所以在复制或移动档案时,不用像 shapefiles 那样每次都得移动一堆档案。本教学中,我们会建立数个多边形和一个线图层,所以 Spatialite 会比较适合我们。你当然也可以在读取 Spatialite 档案后,另存成 shapefile 或其他类型的档案格式。

../_images/738.png
  1. 新增 Spatilaite 图层 视窗中,按下 钮,把图层存成新的名为 nztopo.sqlite 的资料库。在 图层名称 中输入 Roads,然后在 类别 中选择 线。我们的地形底图使用的 CRS 是 EPSG:2193 - NZGD 2000,所以这边就选个跟底图一样的 CRS 即可。请勾选 建立自动递增的主键,这个功能会在属性表格中新增一个叫做 pkuid 的栏位,程式会自动为每个图征指定独特的数值到此栏位中。因为这是个道路图层,我们应还需要 2 个基本属性:道路名和道路种类。所以请在 新增属性 栏位中加入 Name,然后按下 加入属性列表

../_images/837.png
  1. 以同样的方法建立新属性 Class,类别选 文字资料。建立好后按下 确定

../_images/938.png
  1. 图层载入后,按一下 切换编辑状态 以进入图层编辑模式。

../_images/1036.png
  1. 按下 加入图征 按钮,然后在地图上按滑鼠,就可以加入线段端点。沿着道路加入新的端点,直到全部的路都绕过后,按下右键结束图征的编辑。

注解

滑动滑鼠的滚轮键可以用来放大或缩小地图,按住滚轮键则可以拖曳地图。

../_images/1154.png
  1. 按下右键之后,会有一个视窗跳出,你可以在其中为刚刚创造的图征输入属性。因为 pkuid 已经被自动指定了,所以只有它是不能手动设定的。输入在地图中的道路名字,以及道路的种类,当然你也可以都不输入就是了。完成后,按下 确定

../_images/1237.png
  1. 线图层的预设样式是非常细的线,我们要把它改粗一点,以方便在地图上浏览。在 Roads 图层上按右键选择 属性

../_images/1336.png
  1. 图层属性 视窗中切换到 样式 分页,再从样式库中选择一个较粗的样式,像是 Primary。最后按下 确定

../_images/1435.png
  1. 现在就很容易在地图上找到此图征了。按下 储存图层编辑,就可以把刚才的更动写到档案内。

../_images/1534.png
  1. 在把其他道路数位化之前,有些设定还需要更新,才能保证接下来创造图层时不会发生错误。选择 选项 ‣ 自动接合选项

../_images/1630.png
  1. 自动接合选项 视窗中,勾选 使用拓扑(topological)编辑,这个选项可以确保图征共同的边界可以在多边形图层中正确的调整。再来,勾选 开启在相交处使用自动接合,此选项可以自动连接图征的截切点,例如底图的道路转角。

../_images/1728.png
  1. 接下来就继续使用 加入图征 钮,加入其他环绕公园的道路吧。记得每一次加入新图征后,都要按下 储存图层编辑 才会储存起来。有一个称为 节点工具 的功能也非常的方便,我们就来试试看。请按下 节点工具 钮。

../_images/1828.png
  1. 节点工具启用后,点选任一个图征,节点就会显现出来。点选任一节点后,它的颜色会改变,以表示这个节点已经被选取了,这时就可以使用滑鼠拖曳此节点。此操作对修改已有的图层非常的方便,如果我们要删掉选取的节点,只要按下 Delete 键即可。(Mac 上是 Option+Delete 键)

../_images/1922.png
  1. 所有的道路都数位化了之后,按一下 切换编辑状态 关闭图层编辑模式。

../_images/2016.png
  1. 接下来我们要制作的是公园边界的多边形图层。选择 图层 ‣ 新增图层 ‣ 新增 Spatialite 图层,资料库要从下拉选单中选择刚才的 nztopo.sqlite,新的图层命名为 Parks类别 选择 多边形。另外,新增一个称为 Name 的属性,最后按下 确定

../_images/2121.png
  1. 按下 加入图征 钮,然后在地图上点出多边形的顶点。这些顶点圈住的多边形,就是以数位化方式呈现的公园边界。在用右键完成多边形之前,请再次确认你有开启自动接合选项,这样公园多边形和道路的线条中间就不会有任何空隙。

../_images/2219.png
  1. 在跳出的 图征属性 视窗中,输入公园名字。

../_images/2316.png
  1. 我们还可以为多边形图层选择一个很有用的设定,称为 避免相交。再次进入 选项 ‣ 自动接合选项,然后把 Parks 图层后方的 避免相交 栏勾选起来,最后按下 确定

../_images/2415.png
  1. 接着使用 加入图征 再加入另一个多边形。当 避免相交 功能启用时,我们就可以快速地创造另一个图征,不用担心它跟先前的图征的接合点是否在正确的位置上。

../_images/2514.png
  1. 按下右键完成此多边形,然后输入属性的内容。新的多边形会与邻接的多边形完美的接在一起!这功能对比较复杂的边界非常有用,我们在设定边界时可以不需要非常的精确,就可以制作已校正的多边形。最后,再次按下 切换编辑状态,结束 Parks 图层的编辑。

../_images/2612.png
  1. 是时候来数位化地图上的建筑了。这次我们选择 图层 ‣ 新增图层 ‣ 新增 Spatialite 图层,建立一个新的多边形图层,称为 Buildings

../_images/2712.png
  1. Buildings 图层加入后,关掉 ParksRoads 图层,让底下的地图显现出来,然后选择 Buildings 图层,再按下 切换编辑状态

../_images/2612.png
  1. 建筑的数位化通常是件繁琐的任务,而且有个困难点是要手动设定垂直的节点以形成长方形的多边形。这里我们要使用一个称为 Rectangles Ovals Digitizing 的附加元件来帮助我们数位化。关于如何搜寻和安装附加元件,请参考 使用附加元件。当 Rectangles Ovals Digitizing 安装完成后,会看到一个新的工具列出现在画布上方区块。

../_images/2910.png
  1. 放大到有建筑的地方,然后按下 Rectangle by Extent 钮,然后用滑鼠按下并拖曳出长方形。用类似的方法完成其馀的建筑多边形。

../_images/305.png
  1. 你会看到有些建筑不是垂直的,这些形状大概是倾斜成某种角度的多边形。按下 Rectangle from center

../_images/3112.png
  1. 在建筑物的中心按一下,用滑鼠拖曳出一个垂直的长方形。

../_images/3211.png
  1. 接下来我们要旋转此长方形,让它符合地图上的形状。旋转工具是放在 Advanced Digitizing 工具列中,在工具列上空白的地方按下右键,然后勾选 :guilabel:`Advanced Digitizing**,就可以让它呈现在工具列上。

../_images/3311.png
  1. 按下 旋转(多个)图征 钮,

../_images/3410.png
  1. 使用 选择单一图征 工具选择你要旋转的图征。在 旋转(多个)图征 工具启用的状况下,被选取的图征中心会出现一个准心,点选此准心然后移动滑鼠,就会看到旋转图征的预览结果。在适当的角度按下滑鼠按钮,让多边形对齐房屋的底座边界。

../_images/359.png
  1. 储存编辑的结果,全部完成后再次按下 切换编辑状态。现在你可以拖曳调整图层的显示顺序。

../_images/361.png
  1. 数位化的工作到此告一段落,接下来你可以在图层属性中调整标籤与样式,利用你刚刚创造的资料制作一幅好看的地图。

../_images/371.png