PYQGIS에서 loadNamedStyle을 사용한 후 필드에서 변경된 값으로 기호를 분류하는 방법은 무엇입니까?

Dec 16 2020

먼저, 심볼로지에서 그리기 효과 (심볼로지-> 레이어 렌더링-> 그리기 효과)를 포함하는 QML 파일로 레이어에서 레이어 스타일을 내보냈습니다 . 저장하는 동안 모든 카테고리를 확인했습니다 (아래 이미지 참조).

그런 다음 점진적 기호를 구성한 필드의 값을 변경했습니다. 그런 다음 QML 파일을 loadNamedStyle(). 범례와 클래스는 자동으로 변경되지 않았습니다. 따라서 자동으로 업데이트하기 위해 몇 가지 시도했습니다.

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)

효과가있었습니다. 그러나 그 QML 파일의 효과는 그 후 사라졌습니다. 나는 또한 이것이 최선의 방법이라고 생각하지 않습니다. PYQGIS에서 QML 파일을로드 한 후 새 값으로 기호를 분류하는 더 편리한 방법이 있습니까?

답변

1 meteergen Dec 16 2020 at 18:37

좋아, 해결책을 찾았습니다. 내가 한 방법은 다음과 같습니다.

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

이런 식으로, 결정된 매개 변수에 대해 다시 분류하기 위해 기호가 트리거되고 기호 효과도 사라지지 않습니다.