Gere legenda e exporte como imagem usando PyQGIS

Sep 03 2020

Eu tenho uma camada vetorial como:

vLayer = QgsVectorLayer('Point?crs=epsg:4326', vLayerName , providerName)
symbol = QgsMarkerSymbol.createSimple({'name': 'circle', 'color': 'red' , 'stroke-color':'red'})
symbol.setSize(3)
symbolColorProperty = QgsProperty.fromExpression(someExpression)
symbol.symbolLayer(0).setDataDefinedProperty(QgsSymbolLayer.PropertyStrokeColor,symbolColorProperty)
vLayer.renderer().setSymbol(symbol)

Observe que vLayeros símbolos têm cores diferentes por QgsPropertyexpressão. Eu posso gerar e exportar um gráfico de vLayercomo:

...
options  = QgsMapSettings()
options.setLayers([ vLayer ])
...

render = QgsMapRendererParallelJob(options)

render.start()
render.waitForFinished()
img = render.renderedImage()
img.save(image_path, "png")

Como posso gerar uma legenda de acordo com o vLayerque me mostra contagens, porcentagens e símbolos com cores como abaixo.

Respostas

1 M.SEL Oct 01 2020 at 20:01

eu consegui gerar uma legenda usando QgsPrintLayoute QgsLayoutItemLegendobjetos

layout = QgsPrintLayout( QgsProject.instance() )
layout.initializeDefaults()
layout.pageCollection().pages()[0].setPageSize(QgsLayoutSize( width, height, QgsUnitTypes.LayoutInches))
manager = QgsProject.instance().layoutManager()
manager.addLayout(layout)

legend = QgsLayoutItemLegend(layout)
legend.setTitle("title")

layerTree = QgsLayerTree()
for layer in layers: # add layers that you want to see in legend
    layerTree.addLayer(layer)

legend.model().setRootGroup(layerTree)
layout.addLayoutItem(legend)

exporter = QgsLayoutExporter(layout)
exporter.exportToImage(path, QgsLayoutExporter.ImageExportSettings())