Después de la actualización de Qgis 3.0, se ha vuelto muy difícil encontrar información sobre la escritura de scripts de procesamiento en Qgis 3.0.
@Underdark (ver aquí ) ha proporcionado una base para el esqueleto. Este código también parece haberse agregado en Qgis, al escribir un nuevo script desde la plantilla (Qgis 3.0.2).
Sin embargo, no pude encontrar ninguna manera de ayudar a los novatos de Python como yo a comprender cómo cambiar ese código, especialmente para las capas de entrada y salida.
Mi objetivo es escribir un script que tome 2 capas ráster y un doble como entrada, produciendo dos capas.
¿Cuáles serían los cambios necesarios en el código de ejemplo para permitir eso?
Para Qgis 2.x hubiera usado la siguiente sintaxis:
##Layer1=raster
##Layer2=raster
##myDouble=Double
##OutLayer1=output raster
##OutLayer2=output raster
Por lo que entiendo, los cambios deben hacerse en el siguiente procedimiento, pero no estoy seguro de qué poner en práctica.
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))
El 16 de mayo, se lanzó la documentación de Qgis python API . Sin embargo, todavía no está claro para mí cómo usarlo aquí. (Lo que bien podría ser una falta de conocimiento de Python)
Respuestas:
Con la transición de QGIS2.x a QGIS3.x, todo el marco de procesamiento se ha modificado y gran parte de él se ejecuta ahora como clases de C ++ con las que puede interactuar utilizando Python. Desafortunadamente, la sintaxis simple de parámetros para datos / conjunto de datos IO ya no es válida. La nueva estructura de parámetros está mucho más orientada después de los algoritmos de procesamiento incorporados (Python) que se encuentran preinstalados en la caja de herramientas.
Como veo, ya has seguido la descripción de la nueva estructura del algoritmo por @underdark. Pero para ajustar esta estructura a sus requisitos (capas ráster, doble entrada, etc.) debe cambiar el código en varias ubicaciones en el script. He codificado un ejemplo aproximado con una breve explicación para usted (solo un esqueleto de algoritmo basado en el ejemplo @underdarks):
¿Qué pasos se hacen?
QgsProcessingAlgorithm
.INPUT_RASTER_A = 'INPUT_RASTER_A'
) para poder hacer referencia a su algoritmo con los parámetros proporcionados por el marco de procesamiento.QgsProcessingParameterType
- en el caso de que su algoritmo:QgsProcessingParameterRasterLayer
,QgsProcessingParameterNumber
y así sucesivamente. Puede consultar las entradas de la API (es decirQgsProcessingParameterRasterLayer
) para pasar los argumentos correctos y construir los objetos de parámetros.context
yfeedback
objetos para elprocessAlgorithm()
método en el que se obtiene los conjuntos de datos de entrada de los parámetros en tiempo de ejecución (en este caso QgsRasterLayer objetos mediante elparameterAsRasterLayer()
método, etc.).processAlgorithm()
.Espero poder darle algunas ideas sobre cómo diseñar sus algoritmos de Python en QGIS3. Siempre que esté atascado, siempre es útil observar cómo los algoritmos existentes del marco de procesamiento manejan los parámetros. Puedes echarles un vistazo aquí .
fuente