Le plugin QGIS Processing R version 3.0
Le plugin QGIS Processing R permet de développer des scripts avec le langage R pour le module traitement de QGIS.
Le plugin QGIS Processing R a été développé suite au travail de réorganisation du code du module traitement de QGIS 3. North Road a extrait et adapté le code du module traitement de QGIS 2 pour QGIS 3.
Une nouvelle version majeure a été publiée. Cette version intègre des améliorations développées par 3Liz sur commande de l'Ifremer pour la plateforme Sextant.
Depuis la version 2.0.0 du plugin QGIS processing R, nous avons réalisé de nombreux correctifs qui concernaient principalement le support des sorties d'algorithme :
- [Bugfix] CSV Output Table destination was not in results
- [BUGFIX] Processing R algorithms do not have enough outputs
- [Bugfix] Support file destination and output
- Folder destination path added in input commands
- Fix return output file destination value
Les améliorations importantes de la version 3.0.0 concernent les possibilités de description des algorithmes :
- Utilisation de la documentation des paramètres depuis le fichier d'aide
- Définition d'une nouvelle ligne de métadonnées
display_name
pour le libellé de l'algorithme - Utilisation de la chaîne de caractère de description pour les paramètres des algorithmes
Amélioration de la documentation des scripts
Depuis la version 3.16 de QGIS, il est possible de définir une aide pour les paramètres d'un algorithme. Cette possibilité est disponible pour les plugins ajoutant un fournisseur d'algorithme, les scripts Python et les modèles de traitements.
Avec la version 3.0.0 du plugin QGIS processing R, l'aide pour les paramètres peut-être défini dans le fichier d'aide du script. Ce fichier d'aide est un fichier JSON. Le nom du paramètre sert de clé pour définir l'aide de celui-ci.
Par exemple pour un algorithme dont les paramètres polyg
et RPLOTS
, le document d'aide contiendra ces clés
{
"ALG_DESC": "Test help.", // Description de l'algorithme
"ALG_CREATOR": "Me", // Créateur de l'algorithme
"polyg": "A polygon layer", // Aide du paramètre polyg
"RPLOTS": "Plot output", // Aide du paramètre RPLOTS
"ALG_HELP_CREATOR": "Me2" // Créateur de l'aide
}
L'aide des paramètres apparaitra sous forme de Tooltip des champs de saisie de la fenêtre de l'algorithme. Il sera utilisé comme description des paramètres dans la description des algorithmes publiés en OGC Web Processing Service (wps) avec py-qgis-wps.
Définition du titre de l'algorithme
Le titre d'un algorithme basé sur un script R est défini par le plugin de la façon suivante :
1. Le premier nom possible est déduit du nom du fichier du script R, les _
sont remplacés par des espaces. Le nom du fichier sert d'identifiant pour l'algorithme.
2. Le second nom possible est déduit de la ligne de métadonnées (ligne commençant par ##
) name
, les _
sont remplacés par des espaces. La valeur de la ligne de métadonnées name
sert d'identifiant à l'algorithme.
3. Le troisième nom possible est la valeur de la ligne de métadonnées display_name
. L'identifiant de l'algorithme sera la valeur de la ligne de métadonnées name
ou le nom du fichier.
Avec la version 3.0.0 du plugin QGIS processing R, il est possible de dissocié clairement le titre de l'algorithme de son identifiant.
Description avancée des paramètres
La description des paramètres d'un algorithme basé sur un script R repose sur les lignes de métadonnées. Ces lignes commencent par ##
.
Par défaut la description des paramètres se fait selon la structure imaginée
par Victor Olaya pour les scripts Python dans la
version pour QGIS 2 du module Traitement. Un paramètre se décrit de la façon
suivante param_name=[optional] param_type [default_value/values/from_variable]
.
Cette structure s'appuie sur la définition des méthodes asScritCode
/ fromScriptcode
des classes de paramètres de Processing (toutes les classes filles de QgsProcessingParameterDefinition
).
Les entrées peuvent donc ressembler à ceci :
##Layer=vector
spécifie qu'il y aura une variableLayer
qui sera une couche vectorielle##Size=number 10
spécifie qu'il y aura une variableSize
qui sera numérique, et que la valeur par défaut deSize
sera10
##X=Field Layer
spécifie qu'il y aura une variableX
sera le nom du champ pris dans la couche vectorielle du paramètreLayer
Le script R test_algorithm_2.rsx qui permet de tester que le plugin analyse correctement la description des paramètres, présente d'autres exemples de paramètres.
Le défaut de cette description compacte des paramètres est qu'elle ne permet pas de les configurer complètement. Par exemple, il n'est pas possible d'ajouter une description ou une aide.
Pour remédier à cela, nous avons décidé de réutiliser une autre façon de décrire les paramètres déjà disponible dans le module Traitement de QGIS. Cette description avancée des paramètres a été conçu pour les fournisseurs d'algorithmes que sont GDAL, GRASS7, SAGA et Orpheo Toolbox.
Les paramètres sont décrits de la façon suivante QgsProcessingParameter|name|description|other_parameters_separated_by_pipe
.
other_parameter_separated_by_pipe
contient les autres paramètres d'initialisation du paramètre d'entré de l'algorithme.
Les entrées peuvent donc ressembler à ceci :
##QgsProcessingParameterFeatureSource|INPUT|Vector layer
spécifie qu'il y aura une variableINPUT
qui sera une couche vectorielle dont la description estVector layer
##QgsProcessingParameterNumber|SIZE|Aggregation Size|QgsProcessingParameterNumber.Integer|10
spécifie qu'il y aura une variableSize
qui sera numérique de type entier, que sa description estAggregation Size
, et que la valeur par défaut deSize
sera10
##QgsProcessingParameterField|FIELDS|Attributes|None|INPUT|-1|False|False
spécifie qu'il y aura une variableFIELDS
sera le nom du champ pris dans la couche vectorielle du paramètreINPUT
et que sa description estAttributes
Le seul défaut de cette façon de décrire les entrées de l'algorithme est qu'elle
nécessite de connaître les classes de paramètres de Processing (toutes les classes filles de QgsProcessingParameterDefinition
).
Conclusion
L'ensemble de ces améliorations permettent de construire des algorithmes dont l'interface quelle soit graphique dans QGIS bureautique, en ligne de commande avec qgis_process, ou en mode Web avec la norme WPS et py-qgis-wps, est plus conviviale pour les différents utilisateurs.
D'ailleurs les procédés mise en œuvre au sein du plugin QGIS Processing R pourrait très bien être adapté à d'autres langages de programmation comme Julia.
René-Luc D'Hont et Ludovic Hirlimann