Python 및 Matplotlib를 사용한 호수 식별 및 유량 알고리즘 D8 알고리즘 구현.
이 코드는 DEM 및 강우 데이터를 사용하여 흐름 알고리즘을 구현합니다. 또한 Pitflags / Lakes를 식별하고 채우고 호수 유출을 향한 중력 모델을 사용하여 배수 알고리즘을 개발합니다. 배수 알고리즘의 자세한 정보 및 의사 코드는 www.geo-blog.com/lake-flow-algorithm을 참조하십시오.
코드는 네 가지 다른 작업으로 나뉩니다 (Driver.py의 주석 참조).
출력 다이어그램 "네트워크 구조 - 호수 전"은 피트 플래그를 제거하기 전에 흐름 네트워크 구조를 표시합니다 (네트워크가 연결되지 않음).

이 그림의 배경은 높은 래스터 셀을 나타내는 노란색 색상과 낮은 래스터 셀을 나타내는 노란색 색상을 나타내는 고도를 나타냅니다. 선은 흐름 방향을 나타냅니다. 흐름 방향은 O'Callaghan & Mark (1984)에 의해 도입 된 표준 알고리즘 D8로 계산되며, 이는 8 개의 이웃 셀을보고 가장 낮은 이웃으로 흐름 방향을 설정합니다 (또한 Flow.py에서 Flowraster 클래스의 SetDownnode () 메소드 참조). 또한, 인접한 셀이 세포 자체보다 낮지 않으면 그림 1의 빨간색 점으로 표시되어“피트 플래그”를 나타냅니다. Pitflags는 다운 노드가없는 래스터 셀입니다. 즉,이 세포의 다른 셀에서 물이 흐를 수 없습니다.
작업 2 작업 1의 네트워크 구조를 사용하여 유량 (일정한 강우량을 가정)을 계산합니다. 유속은 재귀 함수 getFlow () 에서 계산됩니다. 네트워크가 아직 결합되지 않았기 때문에 호수 / 피트 플래그에서 물이 사라지는 것 같습니다.

이 그림은 끊임없는 비가있는 강 유량 (세포 당 1mm)을 보여줍니다. 황색 값은 높은 유속을 나타내고 파란색 값은 유량이 낮음을 나타냅니다.
작업 3은 비정상적인 강우량을 사용하여 작업 2를 반복합니다 (무작위로 생성)
작업 4는 집수 영역에 합류하여 수 문학적 모델을보다 현실적으로 만듭니다. 이를 위해 싱크대와 호수가 식별되고 호수의 유출이 계산됩니다. 이것은 세 단계로 수행되었습니다. 먼저, 호수는 각 pitflag로 시작하여 알고리즘으로 식별되고 항상 가장 낮은 이웃 (D8 알고리즘과 유사)을 선택하여 가장자리로가는 경로를 만듭니다. 이 길의 가장 높은 지점은 호수의 유출을 나타냅니다. 두 번째 단계에서 식별 된 호수는 유출과 같은 높이까지 채워집니다. 셋째, 호수 유출을 향한 중력이있는 새로운 흐름이 각 호수에 대해 계산됩니다.
구현 된 알고리즘을 테스트하기 위해 수신 강우와 가장자리의 피트 플래그에서의 합산 흐름을 비교했습니다. 두 값은 동일해야했습니다.
호수 유출을 향한 중력으로 흐름을 계산하기위한 알고리즘.



작업 5의 경우 실제 래스터 데이터 (Rainfall and DEM)가 가져 와서 동일한 해상도로 변환됩니다.
