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())
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino