17.28. Aktionsskripte vor oder nach Ausführung
Bemerkung
Diese Lektion ziegt die Ausführung von Aktionsskripten die die Ausführung weiterer Operationen vor oder nach der Verarbeitung eines Algorithmus erlauben.
Aktionsskripte sind Verarbeitungsskripte die direkt vor oder nach einer Prozessierung laufen. Sie können verwendet werden, um Aufgaben die in Verbindung mit einem Algorithmus abgearbeitet werden, zu automatisieren.
Die Syntax von Aktionsskripten ist mit der von Verarbeitungsskripten identisch. Weiter Details findet man unter Kapitel im QGIS Benutzerhandbuch.
In Ergänzung zu den Eigenschaften der normalen Skripte, kann in Aktionsskripten eine besondere globale Variable mit dem Namen alg
verwendet werden. Sie repräsentiert den gerade ausgeführten (bzw. den in Kürze auszuführenden) Algorithmus.
Hier ist ein Beispiel eines Aktionsskriptes, das nachfolgend ausgeführt wird. In der Voreinstellung wird bei der Verarbeitung nur temporär gespeichert. Dieses Skript kopiert die Ausgaben in ein bestimmtes Verzeichnis, so dass die Dateien beim Beenden von QGIS nicht verlorengehen.
import os
import shutil
from processing.core.outputs import OutputVector, OutputRaster, OutputFile
MY_DIRECTORY = '/home/alex/outputs'
for output in alg.outputs:
if isinstance(output, (OutputVector, OutputRaster, OutputFile)):
dirname = os.path.split(output.value)[0]
shutil.copytree(dirname, MY_DIRECTORY)
In den ersten beiden Zeilen werden die benötigten Python Pakete importiert: os
— für den Umgang mit Dateipfaden, wie z.B. die Gewinnung eines Dateinamens und shutil
— für verschiedene Dateioperationen wie z.B. das Kopieren von Dateien. In der dritten Zeile importieren wir die Verarbeitungssausgaben. Was das bedeutet wird später in dieser Lektion erklärt.
Als Nächstes definieren die Konstante MY_DIRECTORY
. Dabei handelt es sich um den Pfad zum Verzeichnis, in das wir die Ergebnisse unserer Analyse ablegen möchten.
Am Ende des Skriptes finden wir den eigentlichen Programmkode. In einer Schleife wird über alle Ausgaben von Algorithmen geprüft, ob sie dateibasiert sind und kopiert werden können. Wenn ja wird das oberste Verzeichnis der Ausgabedateien bestimmt und dann alle Datei in unser Verzeichnis kopiert.
To activate this hook we need to open the Processing options, find the entry named Post-execution script file in the General group, and specify the filename of the hook script there. the specified hook will be executed after each Processing algorithm.
Auf ähnliche Weise können wir Aktionsskripte implementieren, die vor der Ausführung eines Algorithmus gestartet werden. Lassen Sie uns als Beispiel ein Aktionsskript erstellen, das Eingabevektorlayer auf Geometriefehler prüft.
from qgis.core import QgsGeometry, QgsFeatureRequest
from processing.core.parameters import ParameterVector
for param in alg.parameters:
if isinstance(param, ParameterVector):
layer = processing.getObject(param.value)
for f in layer.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([])):
errors = f.geometry().validateGeometry()
if len(errors) > 0:
progress.setInfo('One of the input vectors contains invalid geometries!')
Wie im vorherigen Beispiel werden zuerst die benötigten QGIS- und Prozessierungspakete importiert.
Anschließend wird iterativ über alle Parameter des Algorithmus geprüft, ob ein Vektorparameter vorhanden ist. Wenn ja wird der zugehörige Vektorlayer als Objekt zurückgegeben. Danach werden alle Objekte des Vektorlayers auf Geometriefehler geprüft. Wenn mindestens ein Objekt eine ungültige Geometrie enthält, wird eine Fehlermeldung ausgegeben.
To activate this hook we need enter its filename in the Pre-execution script file option in the Processing configuration dialog. The hook will be executed before running any Processing algorithm.