Реализация алгоритма D8, алгоритма идентификации и потока озера с Python и Matplotlib.
Этот код реализует алгоритм потока, используя данные DEM и осадков. Он также идентифицирует и заполняет питлаг / озера и разрабатывает алгоритм дренажа, используя модель гравитации в направлении оттока озера. Для получения дополнительной информации и псевдокода алгоритма дренажа см.: Www.geo-blog.com/lake-flow-algorithm
Код разделен на четыре разных задачи (см. Комментарии в Driver.py).
Выходная схема «Структура сети - перед озерами» отображает структуру потоковой сети перед удалением питлаг (сети не подключены).

Фон на этом рисунке представляет собой повышение, с желтыми цветами, представляющими более высокие растровые ячейки, и синие цвета, указывающие на низкие растровые ячейки. Линии представляют направление потока. Направление потока рассчитывается с помощью стандартного алгоритма D8, представленного O'Callaghan & Mark (1984), который рассматривает 8 соседних ячеек и устанавливает направление потока к самому низкому соседу (см. Также метод SetdownNode () класса Flowraster в Flow.py). Кроме того, когда ни одна соседняя клетка не ниже, чем сама ячейка, она отмечена красной точкой на рисунке 1, представляющей «питфлаг». Питлаги - это растровые ячейки, у которых нет нисходящего, то есть вода не может течь в любой другой ячейке из этой ячейки.
Задача 2 рассчитывает скорости потока (при условии постоянного количества осадков) с использованием сетевой структуры из задачи 1. Скорости потока рассчитываются в рекурсивной функции getFlow () . Обратите внимание, что вода, кажется, исчезает в озере / питфлаге, потому что сети еще не объединены.

На этом рисунке показаны скорости потока реки с постоянным дождем (1 мм на ячейку). Желтые значения указывают высокую скорость потока, в то время как синие значения указывают на низкую скорость потока.
Задача 3 повторяет задачу 2, используя непостоянные осадки (случайно сгенерировано)
Задача 4 делает гидрологическую модель более реалистичной, присоединившись к областям водосбора. Для этого идентифицируются раковины и озера, и рассчитывается отток озер. Это было выполнено через три шага. Во -первых, озера идентифицируются по алгоритму, начиная с каждого питлага, и создавая путь к краю с всегда выбором самого низкого соседа (аналогично алгоритму D8). Самая высокая точка этого пути представляет собой отток озера. На втором этапе идентифицированные озера заполняются до той же высоты, что и отток. В -третьих, для каждого озера рассчитывается новый поток с гравитацией к оттоку озера.
Чтобы проверить реализованный алгоритм, сравнивались входящие осадки и суммированный поток на Pitflags на краю. Два значения должны были быть одинаковыми.
Алгоритм расчета потока с гравитацией к оттоку озера.



Для задачи 5 реальные растровые данные (осадки и DEM) импортируются и преобразуются в то же разрешение.
