Der Iterationsverlauf hat keine physikalisch korrekte zeitliche Komponente. Dennoch kann die Visualisierung des Iterationsverlaufes vom Anfang bis zu einem annähernd stationären Zustand hilfreich für das Systemverständnis der Iteration sein. Hierzu gibt es die Option „create frequent output“. Warnung: Es werden sehr viele TIF-Dateien geschrieben und man benötigt sehr viel Speicherplatz! Mit häufig geschriebenen Ausgabedateien lässt sich mit etwas Python der Iterationsverlauf in QGIS automatisiert als Einzelbilder visualisieren und exportieren.
import os
from qgis.PyQt import QgsLayoutExporter
QgsApplication.setPrefixPath("/usr", True)
inpath = '/home/tim/GIS/SplashOut_Mischgebiet'
outpath = '/home/tim/GIS/SplashOut_QGIS'
show_wd = True
show_fa = True
files = os.listdir(inpath)
wd_list = []
fa_list = []
for item in files:
if 'vwd' in item:
wd_list.append(item)
if 'vfa' in item:
fa_list.append(item)
wd_list.sort()
fa_list.sort()
wd_list = wd_list[40:43]
fa_list = fa_list[40:43]
if len(wd_list) != len(fa_list):
raise ValueError('number of input files do not match!')
for i, wd in enumerate(wd_list):
fa = fa_list[i]
if show_wd:
layers = QgsProject.instance().mapLayersByName('wd')
layer = layers[0]
layer.setDataSource(os.path.join(inpath, wd),
'wd',
'gdal',
QgsDataProvider.ProviderOptions())
layer.reload()
if show_fa:
layers = QgsProject.instance().mapLayersByName('flow')
layer = layers[0]
layer.setDataSource(os.path.join(inpath, fa),
'flow',
'gdal',
QgsDataProvider.ProviderOptions())
layer.reload()
project = QgsProject.instance()
manager = project.layoutManager()
layout = manager.layoutByName('4K')
exporter = QgsLayoutExporter(layout)
outfile = os.path.join(outpath, str(i).zfill(5) + '.jpg')
result = exporter.exportToImage(outfile, QgsLayoutExporter.ImageExportSettings())
Die Einzelbilder können anschließend mit ffmpeg zu einem Video zusammengefügt werden:
ffmpeg -framerate 60 -f image2 -i %05d.jpg -c:v libx265 -preset slow -crf 29 -r 60 a.mp4