Suite à la mise à jour de Qgis 3.0, il est devenu très difficile de trouver des informations concernant l'écriture de scripts de traitement dans Qgis 3.0.
@Underdark (voir ici ) a fourni une base pour le squelette. Ce code semble également avoir été ajouté dans Qgis, lors de l'écriture d'un nouveau script à partir d'un modèle (Qgis 3.0.2).
Cependant, je n'ai trouvé aucun moyen d'aider les débutants en python comme moi à comprendre comment changer ce code, en particulier pour les couches d'entrée et de sortie.
Mon objectif est d'écrire un script prenant 2 couches raster et un double en entrée, produisant deux couches.
Quelles seraient les modifications nécessaires à l'exemple de code pour permettre cela?
Pour Qgis 2.x, j'aurais utilisé la syntaxe suivante:
##Layer1=raster
##Layer2=raster
##myDouble=Double
##OutLayer1=output raster
##OutLayer2=output raster
D'après ce que je comprends, les modifications doivent être apportées dans la procédure suivante, mais je ne sais pas quoi mettre en place.
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSource(
self.INPUT,
self.tr("Input layer"),
[QgsProcessing.TypeVectorAnyGeometry]))
self.addParameter(QgsProcessingParameterFeatureSink(
self.OUTPUT,
self.tr("Output layer"),
QgsProcessing.TypeVectorAnyGeometry))
Le 16 mai, la documentation de l' API python Qgis a été publiée. Cependant, je ne sais toujours pas comment l'utiliser ici. (Ce qui pourrait très bien être un manque de connaissances en python)
Réponses:
Avec la transition de QGIS2.x à QGIS3.x, l'ensemble de l'infrastructure de traitement a été retravaillé et de grandes parties de celui-ci s'exécutent maintenant en tant que classes C ++ avec lesquelles vous pouvez interagir avec Python. Malheureusement, la simple syntaxe des paramètres pour les données / jeux de données IO n'est plus valide. La nouvelle structure de paramètres est beaucoup plus orientée après les algorithmes de traitement intégrés (Python-) que vous trouvez préinstallés dans la boîte à outils.
Comme je le vois, vous avez déjà suivi la description de la nouvelle structure d'algorithme par @underdark. Mais pour ajuster cette structure à vos besoins (couches raster, double entrée, etc.), vous devez modifier le code à plusieurs endroits dans le script. J'ai codé un exemple approximatif avec une courte explication pour vous (juste un squelette d'algorithme basé sur l'exemple @underdarks):
Quelles étapes sont effectuées?
QgsProcessingAlgorithm
.INPUT_RASTER_A = 'INPUT_RASTER_A'
) Afin de référencer votre algorithme avec les paramètres fournis par le cadre de traitement.QgsProcessingParameterType
- dans le cas de votre algorithme:QgsProcessingParameterRasterLayer
,QgsProcessingParameterNumber
et ainsi de suite. Vous pouvez consulter les entrées API (ie.QgsProcessingParameterRasterLayer
) Afin de passer les bons arguments et construire les objets paramètres.context
et lesfeedback
objets à laprocessAlgorithm()
méthode où vous obtenez les jeux de données d'entrée à partir des paramètres lors de l'exécution (dans ce cas, les objets QgsRasterLayer à l'aide de laparameterAsRasterLayer()
méthode, etc.).processAlgorithm()
.J'espère que je pourrais vous donner quelques informations sur la façon de concevoir vos algorithmes python dans QGIS3. Chaque fois que vous êtes bloqué, il est toujours utile de voir comment les algorithmes existants du cadre de traitement gèrent les paramètres. Vous pouvez les consulter ici .
la source