Wie klassifiziere ich die Symbologie mit geänderten Werten in einem Feld, nachdem loadNamedStyle in PYQGIS verwendet wurde?

Dec 16 2020

Zunächst einmal habe ich eine Schicht Stil aus einer Schicht , die als QML - Datei einschließlich exportierte Zieheffekte (-> Schicht Rendering - Symbologie> Effekte zeichnen) in Symbologie. Beachten Sie, dass ich beim Speichern alle Kategorien überprüft habe (siehe Abbildung unten).

Dann habe ich die Werte in dem Feld geändert, mit dem ich eine abgestufte Symbologie konfiguriert habe. Dann habe ich versucht, die QML-Datei mit zu laden loadNamedStyle(). Die Legende und die Klassen wurden nicht automatisch geändert. Daher habe ich einige Dinge versucht, um das automatisch zu aktualisieren.

field = 'SPREAD'
stylepath = '/path_to_my_layer_style.qml'
layer = iface.activeLayer()
layer.loadNamedStyle(stylePath)
renderer = layer.renderer()
sym = renderer.sourceSymbol()
grad = renderer.sourceColorRamp()
renderVal = renderer.createRenderer(layer,field,5,0,sym,grad)
layer.setRenderer(renderer)

Es funktionierte. Die Effekte in dieser QML-Datei sind danach jedoch verschwunden. Ich denke auch nicht, dass dies der beste Weg ist, dies zu tun. Gibt es eine bequemere Möglichkeit, die Symbologie nach dem Laden der QML-Datei in PYQGIS mit neuen Werten zu klassifizieren?

Antworten

1 meteergen Dec 16 2020 at 18:37

Ok, ich habe eine Lösung gefunden. So habe ich es gemacht,

layer.loadNamedStyle(stylePath)
renderer = layer.renderer()

renderer.updateClasses(layer,0,5) # Update the QgsGraduatedSymbologyRenderer.mode and set the classes up to 5
renderer.updateRangeLabels() # Update label range
renderer.updateColorRamp() # Update the color ramp
iface.layerTreeView().refreshLayerSymbology(layer.id()) # Refresh legend on the interface
layer.reload() 

Auf diese Weise wird eine Symbologie ausgelöst, um die ermittelten Parameter erneut zu klassifizieren, und auch die Symboleffekte verschwinden nicht.