Implementação do algoritmo D8, um algoritmo de identificação e fluxo do lago com Python e Matplotlib.
Este código implementa um algoritmo de fluxo usando dados de Dem e chuva. Além disso, identifica e preenche Pitflags / Lakes e desenvolve um algoritmo de drenagem usando um modelo de gravitação em direção à saída do lago. Para obter mais informações e pseudo-código do algoritmo de drenagem, consulte: www.geo-blog.com/lake-flow-algorithm
O código é dividido em quatro tarefas diferentes (consulte os comentários no driver.py).
O diagrama de saída "Estrutura da rede - antes dos lagos" exibe uma estrutura de rede de fluxo antes de remover pitflags (as redes não estão conectadas).

O plano de fundo nesta figura representa a elevação, com cores amarelas representando células rastas mais altas e cores azuis indicando células rastas baixas. As linhas representam a direção do fluxo. A direção do fluxo é calculada com o algoritmo padrão D8, introduzido por O'Callaghan & Mark (1984), que analisa as 8 células vizinhas e define a direção do fluxo para o vizinho mais baixo (consulte o método SetDownNode () da classe FlowRaster em Flow.py). Além disso, quando nenhuma célula vizinha é menor que a própria célula, ela é marcada com um ponto vermelho na Figura 1, representando um "pitflag". Pitflags são células rastas que não têm um nó, ou seja, a água não pode fluir em nenhuma outra célula dessa célula.
A Tarefa 2 calcula as taxas de fluxo (assumindo a precipitação constante) usando a estrutura de rede da Tarefa 1. As taxas de fluxo são calculadas na função recursiva getFlow () . Observe que a água parece desaparecer em um lago / pitflag porque as redes ainda não se uniram.

Esta figura mostra as taxas de fluxo do rio com chuva constante (1 mm por célula). Os valores amarelos indicam uma alta vazão, enquanto os valores de azul indicam uma baixa taxa de fluxo.
Tarefa 3 Repete a tarefa 2 usando chuvas não constantes (geradas aleatoriamente)
A Tarefa 4 torna o modelo hidrológico mais realista, juntando -se às áreas de captação. Para fazer isso, pias e lagos são identificados e as saídas dos lagos são calculadas. Isso foi realizado em três etapas. Primeiro, os lagos são identificados por um algoritmo começando a cada pitflag e criando um caminho para uma borda sempre escolhendo o vizinho mais baixo (semelhante ao algoritmo D8). O ponto mais alto desse caminho representa a saída do lago. Em uma segunda etapa, os lagos identificados são preenchidos na mesma altura que a saída. Terceiro, um novo fluxo com gravitação em direção à saída do lago é calculado para cada lago.
To test the implemented algorithm the incoming rainfall and the summed flow at pitflags on an edge were compared. Os dois valores tinham que ser os mesmos.
Algoritmo para calcular o fluxo com gravitação em direção à saída do lago.



Para a Tarefa 5, dados reais de varredura (precipitação e DEM) são importados e convertidos para a mesma resolução.
