Jak sklasyfikować symbolikę ze zmienionymi wartościami w polu po użyciu loadNamedStyle w PYQGIS?

Dec 16 2020

Po pierwsze, wyeksportowałem styl warstwy z warstwy jako plik QML, w tym efekty rysowania (symbolika -> renderowanie warstw -> efekty rysowania) w symbolice. Zwróć uwagę, że sprawdziłem wszystkie kategorie podczas zapisywania (patrz poniższy obrazek).

Następnie zmieniłem wartości w polu, w którym skonfigurowałem symbolikę stopniowaną. Następnie próbowałem załadować plik QML z rozszerzeniem loadNamedStyle(). Nie zmieniło to automatycznie legendy i klas. Dlatego próbowałem kilku rzeczy, aby automatycznie zaktualizować to.

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)

Zadziałało. Jednak efekty w tym pliku QML zniknęły po tym. Nie sądzę też, żeby to był najlepszy sposób na zrobienie tego. Czy istnieje wygodniejszy sposób klasyfikowania symboliki za pomocą nowych wartości po załadowaniu pliku QML do PYQGIS?

Odpowiedzi

1 meteergen Dec 16 2020 at 18:37

Ok, znalazłem rozwiązanie. Oto jak to zrobiłem,

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

W ten sposób uruchamiana jest symbolika w celu ponownej klasyfikacji dla określonych parametrów, a także efekty symboli nie znikają.