[FOSSGIS-Talk] QGIS 3.28.5 / Grafische Modellierung

Lippmann, Jörg Joerg.Lippmann at landkreis-mittelsachsen.de
Fr Mär 1 10:33:26 CET 2024


Ich habe doch jetzt tatsächlich was hinbekommen, vielleicht nicht das schönste, aber das haut hin :-) 



"""
Model exported as python.
Name : Final
Group : 
With QGIS : 32805
"""

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


class Final(QgsProcessingAlgorithm):

    def initAlgorithm(self, config=None):
        self.addParameter(QgsProcessingParameterVectorLayer('input', 'Input', types=[QgsProcessing.TypeVectorPolygon], defaultValue=None))
        self.addParameter(QgsProcessingParameterVectorLayer('v12', 'V1', defaultValue=None))
        self.addParameter(QgsProcessingParameterFeatureSink('V1', 'V1', optional=True, type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None))
        self.addParameter(QgsProcessingParameterFeatureSink('V2', 'V2', optional=True, type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None))
        self.addParameter(QgsProcessingParameterFeatureSink('V3', 'V3', optional=True, type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=False, 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(2, model_feedback)
        results = {}
        outputs = {}

        # Attribute nach Feldwert verknüpfen
        alg_params = {
            'DISCARD_NONMATCHING': True,
            'FIELD': 'Gmk_Flst',
            'FIELDS_TO_COPY': [''],
            'FIELD_2': 'Field1',
            'INPUT': parameters['input'],
            'INPUT_2': 'Tabelle1_2e59a394_fa57_48e7_9381_4c28c6924a9b',
            'METHOD': 1,  # Nur Attribute des ersten passenden Objekts verwenden (eins-zu-eins)
            'PREFIX': '',
            'OUTPUT': parameters['V1']
        }
        outputs['AttributeNachFeldwertVerknpfen'] = processing.run('native:joinattributestable', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
        results['V1'] = outputs['AttributeNachFeldwertVerknpfen']['OUTPUT']

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

        # Attribute nach Feldwert verknüpfen
        alg_params = {
            'DISCARD_NONMATCHING': False,
            'FIELD': 'Field1',
            'FIELDS_TO_COPY': [''],
            'FIELD_2': 'Gmk_Flst',
            'INPUT': 'Tabelle1_2e59a394_fa57_48e7_9381_4c28c6924a9b',
            'INPUT_2': parameters['v12'],
            'METHOD': 1,  # Nur Attribute des ersten passenden Objekts verwenden (eins-zu-eins)
            'PREFIX': '',
            'NON_MATCHING': parameters['V3'],
            'OUTPUT': parameters['V2']
        }
        outputs['AttributeNachFeldwertVerknpfen'] = processing.run('native:joinattributestable', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
        results['V2'] = outputs['AttributeNachFeldwertVerknpfen']['OUTPUT']
        results['V3'] = outputs['AttributeNachFeldwertVerknpfen']['NON_MATCHING']
        return results

    def name(self):
        return 'Final'

    def displayName(self):
        return 'Final'

    def group(self):
        return ''

    def groupId(self):
        return ''

    def createInstance(self):
        return Final()



-----Ursprüngliche Nachricht-----
Von: Lippmann, Jörg 
Gesendet: Freitag, 1. März 2024 08:06
An: fossgis-talk-liste at fossgis.de
Betreff: QGIS 3.28.5 / Grafische Modellierung

Hallo zusammen, 

ich habe mir ein Modell 1 zusammengestellt, mit einer Erweiterung (sagt an das so?), „Attribute nach Feldwert verknüpfen“.  
-	Da ist ein Polygonlayer als Eingabelayer 1 - „ax_flurstueck_lokal_verknuepfung“ (276272 Flurstücke) mit der Tabellenspalte „Gmk_Flst“ 
-	Und eine Tabelle als Eingabelayer 2 "Flurstücke" mit nur einer Spalte, also schreibe ich bei Tabellenspalte "Field1" da rein 
-	Bei „Alle Datensätze verwerfen, die nicht verknüpft werden konnten“ --> „Ja“ 
-	Und dann bei Ausgabe „Zusammengefasster Layer“ --> „Vergleich1“ reingeschrieben. 
Das funktioniert aus super, ich bekomme eine Ausgabe“Vergleich1“ mit 122 Flurstücken von 123 Flurstücken.  

Um nun das fehlende Flurstück zu finden, habe ich ein zweites Modell 2 angelegt, wiederum mit „Attribute nach Feldwert verknüpfen“. 
-	Eingabelayer 1 ist wieder die Tabelle mit den 123 Flurstücken, Tabellenspalte „Field1“ 
-	Eingabelayer 2 ist nun mein erzeugter Temp Layer „Vergleich1“  
-	Bei „Alle Datensätze verwerfen, die nicht verknüpft werden konnten steht nun  „Nein“   
-	bei Ausgabe „Zusammengefasster Layer“  „V2“ reingeschrieben 
-	Bei „Nicht verknüpfbare Objekte aus dem ersten Layer“ „V3“ reingeschrieben 
Das ist auch super durchgelaufen, im Temp Layer „V2“ stehen 123 Flurstücke und beim Flurstück 147204-00032/0004 sind die Einträge leer weil es ja nicht gefunden wurde und im Temp Layer „V3“ steht das eine Flurstück was nicht gefunden wurde.  

So jetzt zu den Problemen :-) 

Ich habe alles geschlossen und wieder geöffnet und das Modell 1 gestartet, was auch super durchgelaufen ist, mit der Ausgabe eines Temp Layers „Vergleich1“ Dann habe ich das zweite Modell 2 geladen und gestartet und es kam ein Fehler „Fehler trat bei der Ausführung von Attribute nach Feldwert verknüpfen aus Execution failed after 0.08 Sekunden“. Wenn ich mir jetzt das Modell 2 anschaue, steht da bei „Eingabelayer 2“ nicht mehr „Vergleich1“ drin, so wie ich es angelegt habe sondern „Zusammengefasster_Layer_cd68a51a_02ad_43f0_8338_189549c96850“. 

Nun meine zwei Fragen,
wie bekomme ich in dem „Modell 2“ dauerhaft „Vergleich1“ bei „Eingabelayer 2“ rein und noch viel wichtiger wäre mir die Frage, kann ich die beiden Modelle zusammenfassen. 

Da das mein erster Versuch ist mit Modellen, stelle ich wohl noch bissl unbeholfen an. :-)  


Vielen Dank schon mal im Voraus für eure Hilfe 

Mit besten Grüßen aus Freiberg  

Jörg







Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste