美文网首页
流向算法的一些总结

流向算法的一些总结

作者: Cubics | 来源:发表于2021-08-13 20:18 被阅读0次

一些前话

在数字地形分析中,坡度因子的求算可以说是灵魂,几乎所有复杂的二阶地形因子都或多或少与坡度因子有着直接或潜在的相关。 而在水文因子的求算体系中,流向算子占据的地位与坡度相同。所以,如何在DEM数据中提取出一个较为准确的流向,是一个非常重要的命题。

因为DEM数据的精度具有不确定性,所以一切的地形因子的求算都是相对准确的。一般来说,地形因子求算的准确性与DEM数据的分辨率大小,求算时选取的邻域范围等有很强的关联性。所以很多学者已经研究很多关于地形因子求算的不确定性的问题,但大多数的研究还是有一定的前提条件,流向算法也是如此。

流向算法的特别之处,非常依赖填洼算法的准确性。

流向算法

目前ArcGIS Pro2.8内置了三种流向算法,但由于河流形态有平行型、汇流型、发散型等,应当在根据已掌握的地理信息(如经纬度、高程、地区、气候等)判断该DEM数据包含的河流形态后,再去选择算法进行分析。

D8

D8算法是一种单流向算法,是1988年Jenson 提出的。当时DEM数据刚刚开始发展,因子的求算也都是局限在坡度、坡向等简单因子,而D8的提出对流向的求算可以说是有很大帮助。

求解过程

D8算法与坡度算法类似,通常是通过3*3的滑动窗口进行遍历计算。

流向由来自每个像元的最陡下降方向,最陡下降方向计算如下:

maximumdrop = z-value / distance * 100

假设像元大小为 1,则两个正交像元之间的距离为 1,两个对角线像元之间的距离为 \sqrt{2}(在部分软件中设定为1.5来方便计算)。如果多个像元的最大下降方向都相同,则会扩大相邻像元范围,直到找到最陡下降方向为止。

在ArcGIS中,计算出最陡下降方向时,规定东方向用2的0次方的表示,顺时针每旋转一个,指数加1。即1,2,4,……,128来表示八个方向。

D8算法示意

不足之处

由于D8为单流向算法,即SFD,没有考虑到现实情况中,水向多个方向发散的情况,在一些区域,可能存在问题。并可能出现平行河网的问题。

MFD(Multi-FlowDirection,多流向算法)

MFD算法与Quinn密不可分,但ArcGIS内置的算法,应当为秦承志教授2007发表的自适应多流向算法。MFD 算法可对所有下坡邻域的流向进行划分。

MFD要对3*3的窗口的中心像元求得多个下降方向,结果数据保存是包含三个维度的数据,不能存储在格网的栅格里,所以ArcGIS提供的是云栅格格式 (CRF) 。

求解过程

  • MFD算法与D8算法类似,都需要建立3*3的滑动窗口

  • MFD要对3*3的窗口的中心像元求得多个下降方向,需要首先筛选出与中心像元高程相比高程下降的一些像元

  • 获得下降方向的像元的坡度值

  • 根据下式求得多个方向流向的百分比

    d_i=\frac{(\tan \beta_i)^ f *L_i}{\sum_{j=1}^8(\tan \beta_j)^f*L_j}

    其中

    f = f(e)

    e=\tan(该像元的坡度)

    L_i,L_j = 中心像元到计算像元的距离,对角线距离为\sqrt 2/4*L,邻接距离为1/2*L$$L表示一个像元的大小

不足之处

由于多流向算法对像元都会尝试去存储多个流向的百分比数据,所以无法用常规的Grid栅格来表示。在ArcGIS中是使用CRF格式存储,而在大部分第三方库的调用中是直接跳过这一步的文件存储过程,作为临时数据生成而后删除。是否可以用体素的概念去存储这种数据?值得思考。

Dinf(D-infinity算法)

Dinf算法是David G. Tarboron在1997年提出的,这种算法是将八邻域等分成了八个角度,然后计算最陡下降方向,并通过一定的方式,计算出一个在该区间内的角度值。

求解过程

  • 建立3*3的滑动窗口

  • 将窗口根据对角线和边线划分成八个部分,如图所示

Dinf划分八方向
  • 找到最陡下降方向,并构建一个向量(s1,s2),s1=(e_0-e_1)/d_1,s2=(e1-e2)/d2
Dinf计算坡向
  • 求得坡向r = tan^{-1}(s_2/s_1)

  • 流向 = a_f*r+a_c*\pi/2,a_f,a_c可根据最陡下降方向和下表参照获得

Dinf设定常数

不足之处

Dinf算法有一个预设参数的过程,这个参数很容易受到特定地形的影响,造成计算误差。

一些后话

流向算法还有很多种,这是其中经典的三种,各有优劣。

流向算法可以打破GridDEM的限制做一些突破。

容易理解的算法会让算法推广得更加广泛。

在应用领域,算法结果的数据结构也非常重要,要与主流的数据格式相匹配。

自适应算法是大趋势。

最后,D8是一个在GIS领域让人“闻风丧胆”的算法,因为它太好懂了,又因为它太简单了。

参考

  1. Dinf算法——A new method for the determination of flow directions and upslope areas in grid digital elevation models

  2. D8算法——Extracting Topographic Structure From Digital Elevation Data for Geographic System Analysis]

  3. MFD算法——An adaptive approach to selecting a flow‐partition exponent for a multiple‐flow‐direction algorithm

  4. ArcGIS帮助文档

  5. Digital Terrain Modeling: Principles and Methodology. Zhilin Li, Qing Zhu

相关文章

  • 流向算法的一些总结

    一些前话 在数字地形分析中,坡度因子的求算可以说是灵魂,几乎所有复杂的二阶地形因子都或多或少与坡度因子有着直接或潜...

  • 基础查找算法分析

    在之前学习了一些排序算法,得出了基础排序算法的总结。之后学习了一些查找算法,今天来对于基础的一些查找算法进行总结。...

  • 2019-03-04

    总结一些机器学习算法步骤:

  • C++编写算法(一)——排序问题

    学习《算法》的心得总结,一些观点通过阅读书目自行总结,如有雷同,纯属巧合。另一些观点摘自《算法》一书。 一、选择排...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 程序员常见算法的那些事

    面试的时候经常会被问算法的事情,今天就这个问题查找了一些算法的总结! 算法一:快速排序算法 快速排序是由东尼·霍尔...

  • 常见数据结构与算法整理总结(下)

    这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算法...

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • Apriori

    Apriori算法原理总结-刘建平FP Tree算法原理总结-刘建平PrefixSpan算法原理总结-刘建平用Sp...

网友评论

      本文标题:流向算法的一些总结

      本文链接:https://www.haomeiwen.com/subject/klyjbltx.html