Implementación del algoritmo D8, un algoritmo de identificación y flujo del lago con Python y Matplotlib.
Este código implementa un algoritmo de flujo utilizando un Dem y datos de lluvia. Identifica y llena flags / lagos de pozo y desarrolla un algoritmo de drenaje utilizando un modelo de gravitación hacia la salida del lago. Para obtener más información y pseudocódigo del algoritmo de drenaje, consulte: www.geo-log.com/lake-flow-algorithm
El código se divide en cuatro tareas diferentes (ver comentarios en Driver.py).
El diagrama de salida "Estructura de red: antes de los lagos" muestra una estructura de red de flujo antes de eliminar los flagos de pits (las redes no están conectadas).

El fondo en esta figura representa la elevación, con colores amarillos que representan células de trama más altas y colores azules que indican células de bajo tránsito. Las líneas representan la dirección del flujo. La dirección del flujo se calcula con el algoritmo D8 estándar, introducido por O'Callaghan y Mark (1984), que analiza las 8 celdas vecinas y establece la dirección del flujo en el vecino más bajo (ver también el método SetdownNode () de la clase FlowRaster en Flow.py). Además, cuando ninguna célula vecina es más baja que la célula misma, está marcada con un punto rojo en la Figura 1, que representa un "PitFlag". Los flags son células ráster que no tienen un nodo descendente, es decir, el agua no puede fluir en ninguna otra celda de esta celda.
La tarea 2 calcula las tasas de flujo (suponiendo una lluvia constante) utilizando la estructura de red de la tarea 1. Las tasas de flujo se calculan en la función recursiva getFlow () . Tenga en cuenta que el agua parece desaparecer en un lago / flag porque las redes aún no se unen.

Esta figura muestra las tasas de flujo del río con lluvia constante (1 mm por celda). Los valores amarillos indican una velocidad de flujo alta, mientras que los valores azules indican una baja velocidad de flujo.
La Tarea 3 repite la Tarea 2 usando lluvia no constante (generada aleatoriamente)
La Tarea 4 hace que el modelo hidrológico sea más realista al unirse a las áreas de captación. Para hacer esto, se identifican fregaderos y lagos y se calculan las salidas de los lagos. Esto se llevó a cabo en tres pasos. Primero, los lagos se identifican mediante un algoritmo que comienza con cada flag de Pit y crea un camino hacia un borde con siempre eligiendo el vecino más bajo (similar al algoritmo D8). El punto más alto de este camino representa la salida del lago. En un segundo paso, los lagos identificados se llenan hasta la misma altura que el flujo de salida. Tercero, se calcula un nuevo flujo con gravitación hacia la salida del lago para cada lago.
Para probar el algoritmo implementado, se comparó la precipitación entrante y el flujo sumado en PitFlags en un borde. Los dos valores tenían que ser los mismos.
Algoritmo para calcular el flujo con gravitación hacia la salida del lago.



Para la Tarea 5, los datos de trama real (lluvia y dem) se importan y se convierten a la misma resolución.
