¿Cómo clasificar la simbología con valores modificados en un campo después de usar loadNamedStyle en PYQGIS?

Dec 16 2020

En primer lugar, he exportado un estilo de capa de una capa como un archivo QML que incluye efectos de dibujo (simbología -> representación de capas -> efectos de dibujo) en simbología. Tenga en cuenta que he comprobado todas las categorías mientras lo guardaba (vea la imagen de abajo).

Luego, cambié los valores en el campo con el que configuré una Simbología Graduada. Luego intenté cargar el archivo QML con loadNamedStyle(). No cambió la leyenda y las clases automáticamente. Por lo tanto, he intentado algunas cosas para actualizarlo automáticamente.

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)

Funcionó. Sin embargo, los efectos en ese archivo QML han desaparecido después de eso. Tampoco creo que esta sea la mejor manera de hacerlo. ¿Existe una forma más conveniente de clasificar la simbología con nuevos valores después de cargar el archivo QML en PYQGIS?

Respuestas

1 meteergen Dec 16 2020 at 18:37

Ok, encontré una solución. Así es como lo hice

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() 

De esta forma se dispara la simbología para volver a clasificar por los parámetros determinados y además los efectos de símbolo no desaparecen.