【说明】
ArcMap的水文分析工具箱提供了一套完整的工具链,专门用于基于DEM数据的水文建模。这些工具能够模拟水流方向、累积流量、河网提取以及流域划分等关键水文过程。通过DEM数据计算水流方向矩阵,结合D8算法或多流向算法确定水流路径。累积流量超过设定阈值的区域被识别为河网,生成的数字河网与实际水系吻合度通常在80%-90%之间。生成的数字河网和流域图在洪水风险图制作中作为基础输入层。结合HEC-RAS等模型可模拟不同重现期洪水淹没范围。
而这篇文章,将站在初学者的角度,教大家如何去绘制这样一幅河网图与流域图。成图如下所示:
0.原理与准备数据
原理:
数字高程模型每个像元上都有高程数据,通过这个高程可以计算出坡度,坡向等地形信息。因为水是往低处流,就可以假设每个栅格的像元上都有水流,这些水流会自动地往地势最低处流。基于此,我们就可以通过ArcMap的水文分析工具来进行水的流向,流量分析,提取出河流网络与子流域,制作出河网流域图。
主要步骤可以为以下几步:
- 填洼处理。
- 流向分析。
- 流量分析。
- 提取河流网络。
- 提取子流域。
接下来,我将带着大家走一下这些步骤,并为大家说明此操作背后的原理。
准备数据:
1.绘制区域的矢量数据(shp)(获取源推荐全国地理信息资源目录服务系统)
2.绘制区域的数字高程模型(DEM)(获取源推荐地理空间数据云)
1.填洼处理
我们将所准备的矢量和高程数据导入到ArcMap中后,进行一个裁剪操作后(工具位置:工具箱/Spatial Analyst/提取分析/按掩膜提取),便可以开始进行我们这篇文章的正题了,如果对于裁剪操作,不知道怎么做的,可以翻看一下我的上一篇文章。
因为有些栅格影像它可能会存在数据的缺失或者实际地理环境中有湖泊或坑洞,会导致水流无法自然流动。所以我们需要进行填洼处理,顾名思义就是将这些湖泊,坑洞给填充起来,以确保水流可以连续自由流动。
工具位置:工具箱/Spatial Analyst/水文分析/填洼,工具如下图所示:
操作及说明:
输入表面栅格即可,即DEM高程数据,选择输出填洼过后的栅格保存位置即可。建议每一步操作所生成的栅格,大家都按操作名进行一个命名,便于我们后续操作,防止混淆。
z限制:要填充的凹陷点与其倾泻点之间的最大高程差。如果凹陷点与其倾泻点之间的 z 值差大于 z 限制,则不会填充此凹陷点。说简单一点,就是有一些坑太深了,深度大于z的坑就不填了,让水流在里面积蓄算了。我们这里直接不选即可。
输出结果如下所示,其实看上去与原始的DEM数据并无不同,但实际上进行了一次填洼操作。
2.流向分析
流向分析,即计算栅格数据上每个像元与周围像元的高程差,确定出高程差最大的方向为我们当前像元的流向。在流向分析中,我们常用到的就是D8算法,它最为简单直观,就是如它名字一样计算8个方向的高程差,来确定方向。
工具位置:工具箱/Spatial Analyst/水文分析/流向,工具如下图所示:
操作及说明:
输入填洼后的高程模型。流向类型选择D8。输出结果如下图所示:
不同的颜色就代表了不同的流向。八种颜色对应八个方向。
3.流量分析
流量分析是在上一步的流向分析基础上,计算出该像元有多少像元的水流汇入该点。即有多少个像元的水流如当前像元。数值越大表示潜在的水流汇聚能力越强。
工具位置:工具箱/Spatial Analyst/水文分析/流向,工具如下图所示:
操作及说明:
输入我们上一步操作所得到的流向数据,输入权重栅格数据是指,我们可以输入另一个栅格数据,这个栅格数据上为记录每个像元上面所流的水的多少。我们这里不输入则默认都为1。输出数据类型不用多说,我们上一步所使用的计算流向的方向是D8,我们这里选择D8就好。
输出结果如下所示,颜色越白的地方,流入的像元越多,此时可见一条白色的主干流。
4.提取河流网络
我们上一步操作,其实已经得到了各个河流,但由于各个河流间的流量相差太大,所有有一些很小的河流流量,我们无法直观的看见。于是这步操作,便是通过栅格计算器的强大功能,来提取出,栅格中流量大于某个值的支流,将它们都提取出来为一个单独的栅格图层,使其更加直观。
工具位置:工具箱/Spatial Analyst/地图代数/栅格计算器,如下图所示
操作及说明:
需要我们单独输入上图中的红色框框内容,来提取出栅格的属性值大于一个值的河流,我们这里输入Con("你的流量栅格数据">=一个数学值,1),这里绝对绝对要是全英文的格式输入,至于值的选择,我们可以自己来根据一次一次的输入,来确定你认为效果最好的值,值越大,提取的河网越稀疏,值越小提取的河网越密。
注意,我们可以直接点击上图中的地图表达式,将这个工具当成传统的数学计算机来使用,来避免我们人为输入时,导致的一些格式错误,如全角半角,中英文符号混淆。
输出结果如下所示,我输入的是200,这个值不是绝对的,可以根据自己的流量分析所生成的栅格数据,来进行调整。会输出一个属性值为1的栅格数据
我们可以再进一步,工具箱中提供了可以将河网的栅格数据转变为矢量数据,这样可以更加方便我们对河网数据的处理和下一步流域分析的准备数据。
工具位置:工具箱/Spatial Analyst/水文分析/栅格河网矢量化,工具如下图所示
操作及说明:
需要我们输入一个河流的栅格数据,即我们刚才操作所生成的属性值为1的河网数据,和我们最开始所生成的流向栅格数据,这里就体现了对每个数据命名的重要性。
最后会输出一个矢量的河网数据。如下所示,我们可以对它进行颜色的改变,打开属性表查看每条支流的长度等。
5.提取子流域
目前,我们已经完成了对河网的提取分析,我们可以继续在我们前面所做的基础上进一步提取子流域,即地表径流或地下水流向同一出口(如河流、湖泊)的自然地理单元。在我们高程模型上的表现就是每个支流是由那些像元格所流的水汇集而成。
为了完成子流域的提取,我们主要需要先后进行两步操作,一个是捕捉倾斜点,另一个是分水岭(集水区)的划分。我现在将一个一个操作,并说明背后的原理。
捕捉倾斜点,是集水区划分前不可缺少的一步操作,用于识别特定区域内累积流量最大的像元(即倾泻点)。获取倾斜点,我们就可以知道在一定区域内,水流自然集中的位置。通过获取到这些倾斜点,我们可以为我们下一步的流域分析,做一个数据准备。
工具位置:工具箱/Spatial Analyst/水文分析/捕捉倾斜点,工具如下如所示
操作及说明:
需要我们输入两个必要数据, 一个是栅格数据或要素 倾斜点数据,另一个是输入蓄积栅格数据。我们先说栅格蓄积数据,不用多说,就是我们前面分析得到的流量数据,这里换了一种说法而已。另一个是栅格数据或要素 倾斜点数据,我这里打了个空格,我们输入的应该是倾斜点的数据,那么我们哪里来获取这个数据呢,话不多说,其实就是我们上一步操作后所提取的矢量化河网数据。矢量化后的河网数据的属性表中就包含了倾斜点的数据即acrid那一列,不同支流都有一个倾斜点。这样操作以后,我们倾斜点会相较于直接使用河网的倾斜点更加准确。
最后会输出一个,河网颜色深浅变化的栅格数据。即下图所示:
分水岭的划分,在我们捕捉到倾斜点之后,我们就可以进行子流域的划分了,即确定栅格中一组像元之上的汇流区域。
工具位置:工具箱/Spatial Analyst/水文分析/分水岭(集水区),工具如下图所示:
这里又要我们输入一个流向数据和倾斜点数据,流向数据是我们之前操作中的数据,直接输入即可,另一个又让我们输入倾斜点数据,我们这里输入我们倾斜点捕捉之后的数据。因为我们倾斜点捕捉之后,倾斜点的位置更加精准,生成的子流域更加准确。
最后生成结果如下所示:
这样显示,会有一些流域我们看的不太清楚,我们可以右键这个图层,打开属性,选择符号系统。
将原先的拉伸变为唯一值,即每个区域都用一种颜色来表达,添加所有值,选择一个自己喜欢的色带,再点击应用即可,最后如下所示。
把我们的河网也显示出来
放大,看看效果,不同颜色就代表了一个流域,那个流域的水就流向这个流域在的支流:
【总结】
回顾一下,我们操作的整体流程,可以大致分为两个阶段,第一个阶段是对于河网的提取,我们先从DEM数据入手进行了一个填洼处理,再计算了流向,有了流向又计算了流量,通过栅格计算器,提取出了河网数据。第二阶段是在河网数据的基础上,我们计算了倾斜点,划分了子流域。
其实一想,获取河网,和依靠河网来划分流域,是一个双向的关系。即河网提取后,子流域划分即为反向追踪所有流向该河网节点的像元。可以多加思考一下其中的关系。整个过程分为两大阶段:正向的河网提取(填洼-流向-流量-河网)与反向的流域划分(倾斜点-分水岭),二者形成水文分析的完整闭环。