本章导读:前面的十几个章节几乎都是通过使用 DEM 数据进行水利数据的提取,水利数据都是基于地形进行衍生。但现实中一般很难得到非常精确的 DEM 数据,如果 DEM 的精度不能确保,那么提取出来的数据很难与其他现有的矢量数据进行叠加使用。本章通过 ArcHydro 工具对地形进行修正,修正后的地形则可以与现有的矢量数据进行叠加使用,更加贴合实际情况。 BY 李远祥
前面十几个章节的内容几乎都是围绕 DEM 数据衍生出诸如河流、流域等水利要素。这种做法有它的好处也有它的弊端。
好处是利用地形能够快速的生成河流和流域,便于从自然角度上圈出对应的水文范围;DEM 本身带有地形起伏的信息,而经过流向分析之后,提取出来的自然河流本身带准确的流向,这样可以为后期水文信息化提供了精细而准确的数据来源。
弊端也是非常明显。首先地形数据本身很难获取(至少在国内是这样的情况),包括等值线、高程控制点或者原始的 DEM 数据,这给基于地形的水文分析带来了一定的困扰。虽然网上也可以下载到全球免费的 DEM 数据,但 30 米精度的 DEM 对于大江大河没有太大的问题,对于小河流和小流域,那是在不敢恭维。其次,很多水文单位已经有固定的河流矢量数据(这些河流一般都是通过实际测绘进行标绘的),并且所有的断面数据均基于这些现有的矢量河流数据进行标绘,所以,不论是 DEM 提取的河流还是出水口、河源、节点等都无法跟现有的矢量数据进行叠加使用。
先来看看测绘的河流与 DEM 提取的河流的差异。笔者利用网上免费的 30 米 DEM 数据进行河流的提取,提取结果如下。
再来对比一下通过测量回来的矢量河流
从两图对比可以看出,DEM 计算出来的河流虽然能够查找出一些区域上可能没有测绘的河流,但它生成的河流比较偏平直,细节部分表现不足,这是有 DEM 数据精度导致。
接下来将两个图层叠加对比一下,还是存在一定的偏差的。如下图所示
![](https://i0.wp.com/ws2.sinaimg.cn/large/006tKfTcgy1fs1id9o3ysj31i811udq6.jpg)
在不做任何处理的前提下,通过 DEM 衍生出来的水利要素,基本上不能直接使用,它只能反映出一定的河流关系,而不是实际河流的位置。就算 DEM 精度再高,但提取出来的河流与测绘的河流还是两份不一样的数据,始终还是会存在偏差的。
再来看流向的问题。如果使用河流线要素的数字化方向(绘制河流图形时起点和终点决定了其数字化方向)作为河流的流向,那么,DEM 提取的河流的流向是绝对正确的,这根本上不需要到实地去调查(沿海出海的河流受涨潮的影响存在时间的差异)。
下图是基于 DEM 提取的河流,使用地形渲染去显示 DEM ,反映地形的起伏,用箭头符号描述河流线的数字化方向。
![](https://i0.wp.com/ws2.sinaimg.cn/large/006tKfTcgy1fs1idawmnlj31i811utwf.jpg)
可以看到,河流基本上是从地形高的地方流向地形低洼的地区。这说明河流方向是正确的。
再来看同样区域的测绘的河流,其流向很大程度取决于内业标会时的规范性。如果按照河流的自然流向进行标绘,流向当然不会出现问题。但如果只是标绘出图形,而没有考虑流向,那么就会出现下图的情况,河流方向逆反。
![](https://i0.wp.com/ws3.sinaimg.cn/large/006tKfTcgy1fs1idbxy2wj31i811u1gk.jpg)
如果在后期手动去修改河流流向,不是不可以,但工作量还是比较大的,需要将 DEM 的河流叠加上去作为参考,在编辑状态下修改测绘河流的数字化方向。
![](https://i0.wp.com/ws1.sinaimg.cn/large/006tKfTcgy1fs1idcnwggj31i611s1f1.jpg)
如何解决测绘数据与 DEM 衍生数据的使用问题?答案很简单,就是改进地形数据。利用测绘的河流作为参考,写入到 DEM 中,从而实现地形改善,让测绘的河流所在的像元都处于水流的最低点。 这个过程可以理解为将测绘的河流数据刻入到地形中,在地形中形成一条汇水的渠道。
ArcMap 原生的工具中没有提供地形修正的工具,这就必须依赖于外部工具 ArcHydro Tools 。这是一个非常专业的水文分析工具集合,是基于 ArcGIS 平台的扩展。ArcHydro Tools 由来已久,ArcGIS 9.x 就已经有该工具集,而且开发团队会适配每一个版本的 ArcGIS 。可以从官方的下载地址去找到它。地址如下 http://downloads.esri.com/archydro/archydro/ ,从官网中可以看到,其包含了文档、程序包、样例数据等。
![](https://i0.wp.com/ws1.sinaimg.cn/large/006tKfTcgy1fs1iddik0jj316c0ra0xn.jpg)
在 Setup 项中可以下载到各个 ArcGIS 版本适配的程序。没有区分所谓的 .1 版本,对应的都是大版本号。目前连 ArcGIS Pro 的版本都有。
![](https://i0.wp.com/ws3.sinaimg.cn/large/006tKfTcgy1fs1ideh0wxj316c0rajxj.jpg)
ArcHydroTools 是一个只有几十兆的安装包,安装完之后可以在 ArcMap 找到工具条和工具箱,与 ArcMap 传统的模式一样,工具与工具箱的工具还是比较对应的。当然,工具箱的话可以制作成为 GP 工具,发布成 GP 服务。
![](https://i0.wp.com/ws3.sinaimg.cn/large/006tKfTcgy1fs1idfdhmnj31i811uh00.jpg)
由于 ArcGIS10.1 之后 ArcGIS Server 已经是64位应用程序,所以,如果要在 Server 端发布 GP 服务,32位和64位的 ArcHydroTools 应用都必须安装。
ArcHydroTools 有非常多的工具,这里作详细介绍,关键功能上扩展了原生 Hydro 工具箱中的工具。回到本文的关键问题,如何通过改善地形去生成合适的河流要素。
ArcHydroTools 工具条中在地形处理的工具集合,可以找到 DEM Reconditioning 工具。
![](https://i0.wp.com/ws4.sinaimg.cn/large/006tKfTcgy1fs1idhab5oj31i611uwz9.jpg)
这个工具的主要作用是将线要素强加到 DEM 上来修正 DEM 数据。其操作比较简单,就是输入 DEM 以及河流要素,设置一些缓冲值和平滑值,运算之后会将河流刻入到 DEM 中。
![](https://i0.wp.com/ws2.sinaimg.cn/large/006tKfTcgy1fs1idi7sjzj31i611sqe5.jpg)
其中后面的几个参数分别对应
- Stream Buffer:输入河流的缓冲值: 这是对线性要素进行缓冲的单元格数。
- Smooth drop/raise:如果是正值, 这是线性要素在垂直方向将要下降的值;否则,是线性要素在垂直方向要升高的值。这个值用来把DEM值插入缓冲区(缓冲边界和线性要素之间)。
- Sharp drop/raise: 如果是正值,这是线性要素在垂直方向将要下降的额外值;否则,是线性要素在垂直方向将要升高的额外值。这个结果作用于平滑缓冲插值之上,它用来保护线性要素。
再来看看运行的结果,使用默认的参数值进行计算。
![](https://i0.wp.com/ws1.sinaimg.cn/large/006tKfTcgy1fs1idj58kxj31i811u146.jpg)
可以看到生成的 AgreeDEM 中,黑色渲染部分基本上就是测绘河流的形状,将其在 DEM 中挖出一道道负值的深沟,这样在做流向分析的时候,水流自然会留到深沟中,形成与测绘河流形状一样的河流。
利用这个修正后的 DEM ,使用同样的河流提取流程和参数进行计算,生成的结果就非常贴合测绘的河流。如下图所示
![](https://i0.wp.com/ws3.sinaimg.cn/large/006tKfTcgy1fs1idk1id8j31i411uapq.jpg)
再来看 DEM 生成的河流与测绘的河流的契合程度如何。下图蓝色线为 DEM 提取的河流,红色线为测绘的河流。
![](https://i0.wp.com/ws2.sinaimg.cn/large/006tKfTcgy1fs1idl425xj31i811u4cs.jpg)
从图上可以看到,DEM 生成的河流基本上与原始河流契合。河流分叉又汇合的两个河段被融合成一个河段,这种情况是由于这两个分叉河段位置上比较靠近,工具的容差值较大造成的。
笔者使用的 DEM 数据为 30 米,按照默认缓冲参数为5个像元,那么改善的距离就是150米,两个河段各150米则距离小于300米的两个河段都会被融合。所以要根据实际的情况去输入一些参数。
对提取的河流显示流向,这一次所有的河流方向都是正确的了,并且与原始河流完全贴合。
![](https://i0.wp.com/ws4.sinaimg.cn/large/006tKfTcgy1fs1idlz1k7j31i811u4bf.jpg)
接下来再来对比一下 DEM 修正前后的流域。
![](https://i0.wp.com/ws4.sinaimg.cn/large/006tKfTcgy1fs1idmwaghj31i811uduz.jpg)
![](https://i0.wp.com/ws1.sinaimg.cn/large/006tKfTcgy1fs1idnw4iwj31i811undb.jpg)
从两图可以看到 DEM 修正之后,流域面的多边形机会不会出现拉直线的现象。这比较符合分水岭围蔽的实现情况。
DEM 修正之后带来的好处是连锁的,由于加入了测绘的河流进行修正,当调小提取阈值,提取更小的河流时,这些小河流同样会通过地形很好的接入到测绘的河流中,并且河流的形状也更加贴近实际测量值。下图是调整阈值后生成的更小级别的河流。
![](https://i0.wp.com/ws4.sinaimg.cn/large/006tKfTcgy1fs1idooxp1j31i811uans.jpg)
从图上来看,支流的情况也是比较良好的。
修正了 DEM 之后,意味着可以将 DEM 衍生出来的数据与测绘回来的数据进行共用。这时候加入断面数据进行分析,分析的结果也更加准确。
ArcHydroTools 里面的工具,几乎全部不支持动态投影,这与 ArcMap 原生工具是有一定差异的。所以,在使用工具条或者工具箱工具的时候,输入的数据必须坐标系一致。例如,使用前面所说的 DEM Reconditioning 工具,DEM 与 河流坐标系不一致,工具使用会导致 999999 的错误。工具条工具使用时会弹出诸如
![](https://i0.wp.com/ws3.sinaimg.cn/large/006tKfTcgy1fs1idp7xrxj30qs0fs79p.jpg)
如果出现这些问题,那就需要对参与计算的数据进行坐标转换,确保所有的数据坐标系都一致,这个错误就不再出现了。
利用 ArcHydroTools 中的 DEM Reconditioning 工具,使用测绘的河流数据进行修正 DEM 数据,可以让 DEM 衍生出来的水文要素更加贴近测量数据,并且生成更加准确的结果。
更多的GIS主流和非主流技术,可以持续关注CSDN的GIS制图乐园,以及微信公众号【GIS制图乐园】。BY 李远祥