Note
Ce cours explique comment utiliser des scripts de pré et post exécution pour réaliser des opération supplémentaires avant ou après l’algorithme principal.
Les scripts de pré et post exécution sont exécutés avant ou après l’algorithme principal. Ce mécanisme peut être utilisé pour automatiser des tâches qui doivent être lancées à chaque fois qu’un algorithme est exécuté.
The syntax of the hooks is identical to the syntax of Processing scripts, see the corresponding chapter in the QGIS User Guide for more details.
En plus de toutes les fonctionnalités communes à tous les scripts, une variable globale nommée alg est disponible dans les scripts de pré et post exécution. Elle représente l’objet alogrithme qui vient (ou qui va) être lancé.
Voici un exemple de script de post-exécution. Par défaut, Processing stocke les résultats d’analyse dans des fichiers temporaires. Ce script copie ces fichiers vers un répertoire spécifique pour qu’ils ne soient pas effacés après la fermeture de QGIS.
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)
Dans les deux premières lignes, les composants python nécessaires sont importés: os — pour la manipulation des chemins d’accès, par exemple extraire le nom du fichier, et shutil — pour différentes opérations sur le système de fichier comme la copie de fichier.
Ensuite, nous définissons la constante MY_DIRECTORY, qui contient le chemin vers le répertoire dans lequel nous voulons stocker les résultats de l’analyse.
A la fin du script, nous avons le code principal. Dans la boucle, nous parcourons toutes les sorties de l’algorithme pour vérifier s’il s’agit d’un fichier et s’il peut être copié. Si c’est le cas, nous déterminons l’emplacement de ce fichier et nous le copions dans notre répertoire.
Pour activer ce script, il faut ouvrir les options de Processing, trouver l’entrée Post-execution script file dans le groupe General, et y saisir le nom du fichier contenant le script. Le script spécifié sera exécuté après chaque algorithme de Processing.
De la même façon, on peut créer un script de pré-exécution. Par exemple, créons un script pour vérifier la validité de la géométrie des vecteurs en entrée.
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!')
Comme dans l’exemple précédent, on commence par importer les composant QGIS et Processing nécessaires.
Ensuite, nous parcourons tous les paramètres en entrée de l’algorithme et si un paramètre de type ParameterVector est trouvé, on retrouve la couche vecteur correspondante. L’ensemble des vecteurs de la couche est parcouru et les géométries sont vérifiées. Si au moins un vecteur comporte une géométrie invalide, un message d’alerte est généré.
Pour activer ce script, il faut ouvrir les options de Processing, trouver l’entrée Pre-execution script file, et y saisir le nom du fichier contenant le script. Le script spécifié sera exécuté avant chaque algorithme de Processing.