Implémentation de l'algorithme D8, un algorithme d'identification et d'écoulement du lac avec Python et Matplotlib.
Ce code implémente un algorithme de flux à l'aide d'un DEM et de données de précipitations. Il identifie et remplit en outre les pitflags / lacs et développe un algorithme de drainage à l'aide d'un modèle de gravitation vers l'écoulement du lac. Pour plus d'informations et pseudo-code de l'algorithme de drainage, voir: www.geo-blog.com/lake-flow-algorithme
Le code est divisé en quatre tâches différentes (voir commentaires dans Driver.py).
Le diagramme de sortie "Structure du réseau - avant les lacs" affiche une structure de réseau de flux avant de supprimer les pitflags (les réseaux ne sont pas connectés).

L'arrière-plan de cette figure représente l'élévation, avec des couleurs jaunes représentant des cellules raster plus élevées et des couleurs bleues indiquant des cellules raster faibles. Les lignes représentent la direction d'écoulement. La direction d'écoulement est calculée avec l'algorithme standard D8, introduit par O'Callaghan & Mark (1984), qui examine les 8 cellules voisines et définit la direction d'écoulement vers le voisin le plus bas (voir aussi SetdownNode () Méthode de la classe Flowrass dans Flow.py). De plus, lorsqu'aucune cellule voisine n'est inférieure à la cellule elle-même, elle est marquée d'un point rouge sur la figure 1, représentant un «pitflag». Les pitflags sont des cellules raster qui n'ont pas de nœud de basse, c'est-à-dire que l'eau ne peut couler dans aucune autre cellule de cette cellule.
La tâche 2 calcule les débits (en supposant des précipitations constantes) en utilisant la structure du réseau à partir de la tâche 1. Les débits sont calculés dans la fonction récursive getflow () . Notez que l'eau semble disparaître dans un lac / pitflag car les réseaux ne sont pas encore rejoints.

Cette figure montre les débits de la rivière avec une pluie constante (1 mm par cellule). Les valeurs jaunes indiquent un débit élevé tandis que les valeurs bleues indiquent un faible débit.
Tâche 3 répète la tâche 2 en utilisant des précipitations non constantes (générées au hasard)
La tâche 4 rend le modèle hydrologique plus réaliste en rejoignant les bassins versants. Pour ce faire, les éviers et les lacs sont identifiés et les sorties des lacs sont calculées. Cela a été effectué en trois étapes. Premièrement, les lacs sont identifiés par un algorithme commençant par chaque pitflag et créant un chemin vers un bord avec toujours le choix du voisin le plus bas (similaire à l'algorithme D8). Le point le plus élevé de ce chemin représente l'écoulement du lac. Dans une deuxième étape, les lacs identifiés sont remplis jusqu'à la même hauteur que l'écoulement. Troisièmement, un nouveau débit avec la gravitation vers l'écoulement du lac est calculé pour chaque lac.
Pour tester l'algorithme implémenté, les précipitations entrantes et le flux additionné aux pitflags sur un bord ont été comparés. Les deux valeurs devaient être les mêmes.
Algorithme pour calculer l'écoulement avec la gravitation vers l'écoulement du lac.



Pour la tâche 5, les données REAL Raster (Rassall et Dem) sont importées et converties à la même résolution.
