D8算法的实施,一种与Python和Matplotlib的湖泊识别和流动算法。
该代码使用DEM和降雨数据实现流量算法。它进一步识别并填充了坑 /湖,并使用引力模型向湖流出开发排水算法。有关排水算法的更多信息和伪代码,请参见:www.geo-blog.com/lake-flow-algorithm
该代码分为四个不同的任务(请参阅driver.py中的注释)。
输出图“网络结构 - 湖泊前”在删除pitflag之前显示流动网络结构(未连接网络)。

该图中的背景代表了高程,黄色代表较高的栅格单元,蓝色表示低栅格单元。线代表流动方向。流动方向是用O'Callaghan&Mark(1984)引入的标准算法D8计算的,该算法介绍了8个邻居单元,并将流动方向设置为最低的邻居(另请参见Flow.py中的Flofraster类的SetDownNode()方法)。此外,当没有相邻的细胞低于细胞本身时,它在图1中标有红点,代表“ pitflag”。 pitflag是没有落水的栅格单元,即从该单元中的任何其他单元中流动水。
任务2使用任务1的网络结构计算流速(假设降雨量)。流速是在递归函数getflow()中计算的。请注意,由于网络尚未加入,水似乎消失在湖泊 /坑中。

该图显示了持续降雨的河流流量(每个单元1毫米)。黄色值表示高流速,而蓝色值表示低流速。
任务3使用非恒定降雨重复任务2(随机生成)
任务4通过加入集水区使水文模型更现实。为此,确定了水槽和湖泊,并计算出湖泊的流出。这是三个步骤进行的。首先,湖泊是通过从每个Pitflag开始的算法来识别的,并创建了通往边缘的路径,并始终选择最低的邻居(类似于D8算法)。这条路的最高点代表湖泊的流出。在第二步中,确定的湖泊被填充到与流出相同的高度。第三,为每个湖泊计算出重力向湖流出的重力。
为了测试实施的算法,比较了边缘处的降雨量和凹痕处的总流量。两个值必须相同。
用于计算流动的算法,重力向湖流出。



对于任务5,实际栅格数据(降雨和DEM)被导入并转换为相同的分辨率。
