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)被導入並轉換為相同的分辨率。
