Processing#
Processing est un framework pour faire des algorithmes dans QGIS.
Toute la boite à outils Traitement dans QGIS sont des basés sur "Processing".
Note, depuis QGIS 3.6, il existe désormais une autre syntaxe pour écrire script Processing à l'aide des décorateurs Python. Lire sur Docteur Python pour les décorateurs
Documentation#
Pour l'écriture d'un script Processing, tant en utilisant la POO ou la version avec les décorateurs, il y a une page sur la documentation.
Utiliser Processing en Python avec un algorithme existant#
- Sur une couche en EPSG:2154, faire un buffer de 10 mètres par exemple.
- Cliquer sur la petite horloge dans le panneau de Processing/Traitement en haut
- Cliquer sur le dernier traitement en haut, puis copier/coller la ligne de Python
On peut appeler un traitement en ligne de commande Python :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Tip
Pour obtenir l'identifiant de l'algorithme, laissez la souris sur le nom de l'algorithme pour avoir son info-bulle dans le panneau traitement.
Idem pour les identifiants des paramètres, dans la fenêtre de l'algorithme.
Lien vers la documentation de Processing en console
1 |
|
Pour obtenir la description d'un algorithme :
1 |
|
Exercice, faire une 3 tampons sur la même couche vecteur, distance 10, 20 et 30 mètres, avec une fonction.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Warning
Attention si utilisation de iface.activeLayer()
qui va être modifié si utilisation de QgsProject.instance().addMapLayer()
.
Il peut être nécessaire d'extraire la sélection de la couche hors de la boucle.
Tip
Il existe aussi processing.runandLoadResults
qui permet de charger directement les résultats, comme QGIS en mode graphique.
Lancer l'interface graphique de notre algorithme#
Au lieu de processing.run
, on peut créer uniquement le dialogue. Il faut alors l'afficher manuellement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Ou alors directement lancer exécution du dialogue :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Convertir un modèle Processing en python#
Il est possible de convertir un modèle Processing en script Python. On peut alors le modifier avec plus de finesse.
On ne peut pas reconvertir un script Python en modèle.
Manipulation#
- Ouvrir en modèle, par exemple ce fichier model3
- Depuis le modèle, cliquer sur le bouton "Convertir en script Processing".
- Ouvrir en parallèle le script Processing Python de QGIS (Boîte à outil → Python → Créer un nouveau script depuis un modèle)
Avec QGIS < 3.40.2
Le modèle par défaut dans QGIS est un plus compréhensible dans QGIS >= 3.40.2. On peut le récupérer manuellement.
Utiliser un script Processing dans une action#
On peut utiliser processing.run()
dans le code d'une action, pour faire une zone tampon sur un point en particulier
par exemple.
On peut lancer, graphiquement depuis la boîte à outil Processing, une zone tampon, avec une sélection. Regardons ensuite dans l'historique Processing pour voir comment QGIS a pu spécifier la sélection dans son appel PyQGIS.
On note l'usage d'une nouvelle classe QgsProcessingFeatureSourceDefinition
.
On souhaite donc pouvoir faire une zone tampon personnalisée en cliquant sur un point à l'aide d'une action.
Il faut donc revoir le code dans le chapitre actions pour voir comment créer une action. Pour utiliser la sélection, nous allons faire dans l'action :
1 2 3 4 5 6 |
|
On peut compléter l'action avec un processing.run
en utilisant uniquement l'entité en sélection.
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Introduction aux décorateurs#
Comme mentionné au début de ce chapitre, il est possible de ne pas utiliser la POO pour écrire un "Script Processing" mais plutôt l'écriture à l'aide des décorateurs.
C'est "censé" être plus simple, pour éviter de voir l'aspect de la programmation orienté objet avec la complexité des classes.
Info
Cependant, cette syntaxe n'est pas compatible avec une extension Processing.
Dans la documentation QGIS, on trouve :
- le tableau de correspondance entre la notation dans le décorateur et pour les types des paramètres
- un exemple avec décorateur la correspondance
Le code suivant utilise le décorateur @alg
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|