Die Idee für SplashTool stand im Raum, ebenso die wesentlichen Bibliotheken für die Umsetzung. Das Projekt soll in der Programmiersprache Python umgesetzt werden. Diese bietet über zahlreiche Bibliotheken Funktionen zur effizienten Umsetzung. Als Standardskriptsprache sowohl in QGIS als auch in ArcGIS ist sie zudem im Bereich Starkregenanalysen weit verbreitet.
Relativ schnell war auch klar, dass die Analyse auf Rasterdaten basieren soll. Hierbei bietet sich GDAL als Bibliothek zum Einlesen und Ausspielen der GeoTif Dateien an, die eigentliche iterative Analyse erfolgt mit Numpy, welches über zahlreiche mathematische Funktionen und auf Geschwindigkeit optimierte Berechnungsfunktionen verfügt.
Wesentliche Kenngrößen der Iteration sind
- Geländehöhe
- Wassertiefe
- Summe der Abflüsse je Zelle über den Verlauf der Iteration
Ein wesentlicher Punkt in der Entwicklung ist die Berechnung des Abflusses zwischen den Zellen von Iterationsschritt zu Iterationsschritt. Nach einigen Tests mit der numpy.gradient Funktion habe ich beschlossen, einen eigenen Differenzenansatz zu verfolgen, bei welchem der Fluss zwischen den Zellen in Abhängigkeit der Differenzen des absoluten Wasserstandes zwischen benachbarten Zellen ermittelt wird.
diff_sum = dy_up + dy_down + dx_up + dx_down
wl_flow = diff_sum / 4
# however, water flow cannot be more than
# the water level in the cell
wl_flow = np.where(wl_flow > self.wd, self.wd, wl_flow)
# update water level in the center cells
self.wd -= wl_flow
# add the outflow to flow accumulation raster
self.flowacc += wl_flow
Die komplette Iteration ist mittlerweile in der Dokumentation beschrieben.