1 votos

Unir partes de scripts de PyQGIS

En mi camino para encontrar una solución a Esta pregunta Estoy tratando de fusionar un script generado automáticamente con Este ejemplo.

Mi idea es que después del último paso, podría insertar el script que no hace nada con el archivo sino que sólo renombra el archivo temporal de salida, porque no es una fuente nativa.

Ejecutando todo lo que hay en la caja de herramientas.

¿Cómo puedo establecer la salida temporal como entrada al script de ejemplo?

Esta es la parte del script generado automáticamente:

        OUTPUT='OUTPUT'

    def initAlgorithm(self, config=None):
        self.addParameter(QgsProcessingParameterVectorLayer('maininput', 'Main Input', types=[QgsProcessing.TypeVector], defaultValue=None))
        self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT,self.tr('My output layer')))

        # Buffer
        alg_params = {
            'DISSOLVE': False,
            'DISTANCE': 10,
            'END_CAP_STYLE': 0,
            'INPUT': parameters['maininput'],
            'JOIN_STYLE': 0,
            'MITER_LIMIT': 2,
            'SEGMENTS': 5,
            'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
        }
        outputs['Buffer'] = processing.run('native:buffer', alg_params, context=context, feedback=feedback, is_child_algorithm=True)

y después de eso, quiero insertar el otro script, teniendo "outputs['Buffer']['OUTPUT']" en lugar de "INPUT"

        source = self.parameterAsSource(parameters, outputs['Buffer']['OUTPUT'], context)

        (sink, dest_id) = self.parameterAsSink(
            parameters, "OUTPUT", context,
        source.fields(), source.wkbType(), source.sourceCrs())

        total = 100.0 / source.featureCount() if source.featureCount() else 0
        features = source.getFeatures()
        for current, feature in enumerate(features):
            if feedback.isCanceled():
                break
            out_feature = QgsFeature(feature)
            sink.addFeature(out_feature, QgsFeatureSink.FastInsert)
            feedback.setProgress(int(current * total))

        return {"OUTPUT": dest_id}

Tengo un error

AttributeError: El objeto 'NoneType' no tiene el atributo 'fields'

0voto

user139112 Puntos 6

Como solución parcial guardé el script de la plantilla con el nombre de salida deseado y lo puse como último paso de mi script principal.

Así que no uní partes de guiones, sino guiones enteros. Sin embargo, el resultado fue el esperado, el archivo de salida aparece con el nombre que le asigné.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X