PYQGIS'de loadNamedStyle kullandıktan sonra bir alandaki değişen değerlerle semboloji nasıl sınıflandırılır?

Dec 16 2020

Öncelikle, sembolojide çizim efektleri (semboloji -> katman oluşturma -> çizim efektleri) içeren bir katmandan QML dosyası olarak katman stilini dışa aktardım . Kaydederken tüm kategorileri kontrol ettiğimi unutmayın (aşağıdaki resme bakın).

Ardından, Dereceli Semboloji yapılandırdığım alandaki değerleri değiştirdim. Sonra QML dosyasını ile yüklemeyi denedim loadNamedStyle(). Efsaneyi ve sınıfları otomatik olarak değiştirmedi. Bu nedenle, bunu otomatik olarak güncellemek için birkaç şey denedim.

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)

İşe yaradı. Ancak, o QML dosyasındaki etkiler bundan sonra kayboldu. Ben de bunu yapmanın en iyi yolu olduğunu düşünmüyorum. QML dosyasını PYQGIS'e yükledikten sonra sembolojiyi yeni değerlerle sınıflandırmanın daha uygun bir yolu var mı?

Yanıtlar

1 meteergen Dec 16 2020 at 18:37

Tamam, bir çözüm buldum. İşte böyle yaptım

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

Bu sayede semboloji, belirlenen parametreler için yeniden sınıflandırmak üzere tetiklenmekte ve ayrıca sembol etkileri ortadan kalkmamaktadır.