ArcGIS水文分析实战教程河流提取与河网分级

Posted 李远祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcGIS水文分析实战教程河流提取与河网分级相关的知识,希望对你有一定的参考价值。

ArcGIS水文分析实战教程(6)河流提取与河网分级

本章导读:ArcGIS水文分析模块提供了3个工具用作河网提取。GIS和测绘专业人员无法理解,用作水文分析连DEM数据都能拿到了(精度较高的DEM数据在我国都属于涉密数据),难道就没法拿到精度较低的线状河流数据?利用DEM数据来生成河流网络,除了一定的工作量之外,结果还可能不如实测的河流精度高,这样做有点多此一举了。笔者认为这恰好反映出行业的差距。水文分析更多的是关心河流的链接关系,河流与流域之间的关系,而非精确的图形和空间位置。本章内容在操作上属于简单类型,笔者会更多的从水文分析角度去解释分析结果。 BY 李远祥

分析流程

ArcGIS水文分析工具箱提供了【河流链接】、【河网分级】、【栅格河流矢量化】3个工具用作河流提取和分级定义。如下图所示

河流提取的全过程为 创建无凹陷点DEM–>流向分析–>流量统计–>定义地表最小的地表径流–>河流链接–>栅格河流矢量化 。

关于创建无凹陷点DEM可以参考《ArcGIS水文分析实战教程(3)DEM数据准备》、《ArcGIS水文分析实战教程(4)地形预处理》内容;流向分析、流量统计和定义最小的地表径流,在《ArcGIS水文分析实战教程(5)细说流向与流量》多了详细的解读。

矢量河流提取

在上一章中讲到的针对流量栅格进行了条件函数的定义,河网的形状大概就出来了。但这个数据表达的只是一系列大于一定蓄积栅格的像元点,原则上它也只是离散点,尽管看起来像连续的河流。如下图

可以从图例中看到这个结果的像元值范围从10000-309111 . 【河网链接】工具就是利用统计后的栅格数据与流向数据,连接一个像元点,利用流向判断出不同的河流,并把像元点连接成线。说白了就是将像元点串起来并做了不同线段的划分。下图是河流链接的示意图

这个示意图是从ArcGIS软件中截取出来的,一般的水文从业都能看懂,但这个图不够专业,显然是出自于程序员之手。笔者在第二章《ArcGIS水文分析实战教程(2)ArcGIS水文分析工具的基本原理》曾经引用过相关的示意图,下图就是水文学上常见的河流链

从两张图对比可见,水文学上的分类要比ArcGIS上的更加细致,光是链接便分为外链和内链,没有河流汇入的链接是外链,有其他水系汇入的河流为内链;交互点也分为河源、节点和出口,分别对应外链的起点、内链的起点、树状河网的最低点。

这么说来,是不是说ArcGIS软件的河网链接就不够专业呢?其实并不是这样的!因为在水文学上链接是为了反映出河流之间的关系,最终是为河流分级服务的。而ArcGIS还提供了河流分级工具,很好的对应水文分析的要求。
【河流链接】分析需要的是执行过条件函数后的流量统计栅格,也就是说筛选过流量的栅格数据,并且需要流向栅格进行参考。如下图

从分析结果可以看到,链接之后离散的像元会被串联起来,形成独立的河流。如下图所示,河网已经被串联成27条河流,但仍然使用栅格的形式表示。

如果不关注河流的分级,只用作河流线体的提取(测绘专业的人就喜欢这么干),直接使用【栅格河网矢量化】工具进行矢量河流数据的生成。如下图

这里要求的【河流栅格数据】,最低限度就是执行过河流链接的结果,当然也可以是【河流分级】之后的结果。

下图是生成的矢量河流结果

矢量河流会生成一些特殊的字段作为标记,例如arcid字段,记录的是元素网格的id,grid_code记录的是河流的唯一Id,因为在河网链接的时候已经对蓄积像元进行了计算,并确定了栅格河流,而from_node和to_node就是记录河段从哪个流量栅格流向下一个流量栅格。所以,如果将grid_code相同的河段全部选择,那它就是一个完整的链接(有可能是外链也有可能是内链)

如果不考虑分级的情况生成唯一的河流,那么可以使用【融合】工具对上面的矢量河流线要素进行融合,如下图设置

最终结果就是合并为原来的27条河流,如下图

###河网分级
在水文学上,河流链接不是为了提取矢量河流,而是为河流分级做准备。水文学更多的是关注河流之间的关系、河流与流域的关系,而非河流本身的图形;即便关注的是单个河流的几何图形,但一般也会跟高程带上关系,例如河流比降。所以,河流链接之后,一般就是对河流进行分级了。
前面部分提及过ArcGIS的河流链接与水文学的链接的一些差异,但因为最终提供了河网分级功能,所以在链接部分并没有影响。
水文学上的河网分级在第二章《ArcGIS水文分析实战教程(2)ArcGIS水文分析工具的基本原理》的时候已经做了详细的论述,常用的有霍顿分级、斯特拉勒分级、施里夫分级、沙依达格分级。通过下图可以重温一下其分级的基本原理


各种分级的方法这里不再详细论述。ArcGIS河网分级工具中之包含两种分级方法,斯特拉勒分级和施里夫分级,而分析工具中默认使用的是斯特拉勒分级法。

霍顿分级法:2级以上的河流均可以一直延伸到河源,但实际上它们的最上游都只具有1级河流的特征。
斯持拉勒法:不可能像霍顿分级法一样将2级以上河流都一直延伸到河源,因而总是将能通过全流域水量和泥沙量的河流作为水系中最高级的河流的。斯持拉勒法主要不足是不能反映流域内河流级愈高,通过的水量和泥沙量也愈大的事实。
施里夫和沙伊达格分级法:很好弥补了上述分级方法的缺陷,非常适合在数值上进行计算。

下图是使用河流链接的结果数据进行输入,结合流向栅格去做斯持拉勒河网分级

最终的结果是生成了一个三级分级,用红绿蓝三种颜色表示分级结果,如下图所示

ArcGIS的帮助提示说的非常的含糊,在【河流栅格数据】中没有具体说明是那一步骤生成的河流栅格,所以上面的例子就直接使用河网链接后的结果数据。后来笔者思考了一下,因为这个分级工具还是需要流向栅格,【河流链接】工具也是需要流向栅格作为参数,那是不是意味着这两个工具是个平行的工具,而不是一个顺序的工具。为此笔者还特意做了一个尝试,使用条件函数过滤后的流量数据作为河流参与分析。

使用条件函数过滤后的流量数据作为河流参与分析的结果跟想象中的一样,通过查看图形和两个属性表,发现是完全一致的。如果使用减法工具,两个栅格结果相减,结果肯定就是完全为nodata了。如下图

使用这个工具还有一些需要注意的地方,如果输入河流栅格数据和输入流向栅格数据是从同一DEM数据获取,则河网分级的输出质量会更高。如果河流栅格数据是从栅格化的河流数据集获取(即河流原来是矢量数据,为了参与分级,先通过工具将矢量河流进行栅格化),则输出可能不可用,因为各像元的流向与河流像元的位置不对应。

对河网分级后的栅格数据进行矢量化,使用【栅格河流矢量化】工具,如下图

其结果更加让人满意,因为除了转化为矢量河流之外,还会自动的创建了河流链接。下图可以通过属性表看到生成的27条河流,跟前面所说的河流链接工具的结果是一样的。

所以,从这个操作中可以得到一个重要的启示。如果要进行河流链接的分析,最好是在【河网分级】之后进行。

栅格河流转矢量河流

GIS对栅格计算的支持远没有对矢量数据的多,所以大多数情况下都需要将栅格数据转换为矢量数据进行分析。虽然ArcGIS提供了栅格转矢量的工具,如【栅格转线】、【栅格转面】等。但作为水文分析的话,在栅格河流转换为矢量河流时,远没有使用【栅格河流矢量化】效果那么好。
从下面这张图可以看出【栅格河流矢量化】的特点

利用分级后的河网可以做什么?最直接的方式就是绘制河流的分级显示图。利用grid_code作为标注显示等级,使用【唯一值渲染】用不同大小的符号显示河流,这样就可以很直观的反应出河网关系。下图是使用斯持拉勒分级的河网分级图

如果还需要特殊的表达和分析,后期还可以制作河网的逻辑示意图,笔者会在后续的章节中介绍河网的逻辑示意图。
除此之外,还可以通过河网生成河口出水口。这个非常简单,因为矢量河流已经生成好了,而且是带数字化方向的。

数字化方向指的是线图形在生成的时候从起点到终点的方向。
河网中的每一条河流其流向都是与数字化方向相同的。如果使用箭头符号去表示其流向,可以很直观的看出来。如下图设置

然后将河网叠加两次,进行观察,通过其树状结构可以对比数字化方向与流向的关系

正式因为有这一规则,那么就可以使用【要素折点转点】工具来捕捉其线段的终点,那这个终点就是河口的位置了。这个工具在【数据管理】–【要素】–【要素折点转点】,执行时点类型选择【end】,如下图所示

这样提取出来的就是河口的位置。这个点在水文分析中又称之为“出水口”或“倾泻点”。如下图所示:

这就是提取流域面的时候一个非常重的参数了。

总结

河流提取与河网分级就软件操作层面是相对简答的,结合ArcGIS其他的一些分析工具,可以计算出更多的水文因子。本章还没有涉及到河网分级后如何进行更多的水文分析,河网分级属于水文分析的前提准备。只有涉及到流量监测(水文学上的流量监测)和洪峰计算时,通过其分级结合数学模型可以去推算洪峰来临时间。

如果读者对水文分析感兴趣的话,可以持续关注CSDN的GIS制图乐园,以及微信公众号【GIS制图乐园】。BY 李远祥

以上是关于ArcGIS水文分析实战教程河流提取与河网分级的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS水文分析实战教程(11)河流提取流程

arcgis中如何扣除池塘

ArcGIS水文分析实战教程(13)流域提取流程

ArcGIS水文分析实战教程(14)提取水库湖泊等面状水系

ArcGIS水文分析实战教程(10)河流平均比降计算

ArcGIS水文分析实战教程(17) 构建简单的ArcHydro数据模型