2

For several tasks in QGIS 3.4 I need a python script. As I am not used to use python I created the script with the graphical modeler (I modeled the tasks in the graphical modeler and exported the python script). The first part of the script is basically

  1. an object-filter to choose all points with a common attribute of a point layer
  2. create a heatmap with all the points choosen with the object-filter

When I start the model from the graphical modeler it works as it should. But after exporting the python script and start this from the processing toolbox, it gaves a "KeyError", that the output of the object-filter is not specified.

The first two algorithms in the python script are as follow:

from qgis.core import QgsProcessing
from qgis.core import QgsProcessingAlgorithm
from qgis.core import QgsProcessingMultiStepFeedback
from qgis.core import QgsProcessingParameterVectorLayer
import processing


class Automatisierung_20190527(QgsProcessingAlgorithm):

    def initAlgorithm(self, config=None):
        self.addParameter(QgsProcessingParameterVectorLayer('punkte', 'punkte', types=[QgsProcessing.TypeVectorPoint], defaultValue=None))

    def processAlgorithm(self, parameters, context, model_feedback):
        # Use a multi-step feedback, so that individual child algorithm progress reports are adjusted for the
        # overall progress through the model
        feedback = QgsProcessingMultiStepFeedback(8, model_feedback)
        results = {}
        outputs = {}

        # Objektfilter
        alg_params = {
            'INPUT': parameters['punkte'],
            'OUTPUT_gefiltert_1990': QgsProcessing.TEMPORARY_OUTPUT
        }
        outputs['Objektfilter'] = processing.run('native:filter', alg_params, context=context, feedback=feedback, is_child_algorithm=True)

        feedback.setCurrentStep(1)
        if feedback.isCanceled():
            return {}

        # Heatmap (Kerndichtenschätzung)
        alg_params = {
            'DECAY': 0,
            'INPUT': outputs['Objektfilter']['OUTPUT_gefiltert_1990'],
            'KERNEL': 0,
            'OUTPUT_VALUE': 0,
            'PIXEL_SIZE': 100,
            'RADIUS': 15000,
            'RADIUS_FIELD': None,
            'WEIGHT_FIELD': None,
            'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
        }
        outputs['HeatmapKerndichtenschtzung'] = processing.run('qgis:heatmapkerneldensityestimation', alg_params, context=context, feedback=feedback, is_child_algorithm=True)

        feedback.setCurrentStep(2)
        if feedback.isCanceled():
            return {}

The error message says the following:

Results: {}
Traceback (most recent call last):
File "<string>", line 34, in processAlgorithm
KeyError: 'OUTPUT_gefiltert_1990'

Can somebody help me with fixing that error?

bumped to the homepage by Community 12 hours ago

This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.

0

QGIS 3.4 does not allow for exporting models as scripts, this was reintroduced in 3.6 (see Exporting processing modeler as Python script in QGIS 3? )

So I am assuming you have used a higher version of QGIS (3.6+) to export your script, and are then trying to run the script in 3.4. Like this question: QGIS 3.8 model to Python script, not working in 3.4

And the answer is the same: QgsProcessing.TEMPORARY_OUTPUT is not available in QGIS 3.4.

So this explains why your script fails when it attempts to use['OUTPUT_gefiltert_1990'] which has the value of QgsProcessing.TEMPORARY_OUTPUT

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.