Ho un progetto QGIS che contiene un compositore. Ovviamente se vado nella GUI posso esportarlo come pdf ecc. Per il mio script make, anche se voglio farlo tramite uno script Python. Dalla lettura online ecco il mio tentativo:
#!/usr/bin/env python
import sys
from qgis.gui import QgsMapCanvas, QgsLayerTreeMapCanvasBridge
from PyQt4.QtCore import QFileInfo
from PyQt4.QtXml import QDomDocument
from qgis.core import *
qgs = QgsApplication(sys.argv, True)
QgsApplication.setPrefixPath("/usr", True)
qgs.initQgis()
def make_pdf():
canvas = QgsMapCanvas()
bridge = QgsLayerTreeMapCanvasBridge(
QgsProject.instance().layerTreeRoot(), canvas)
bridge.setCanvasLayers()
QgsProject.instance().read(QFileInfo('../board.qgs'))
composition = QgsComposition(canvas.mapSettings())
map_item = composition.getComposerItemById('board36x48')
map_item.setMapCanvas(canvas)
map_item.zoomToExtent(canvas.extent())
composition.refreshItems()
composition.exportAsPDF('generated/board.pdf')
QgsProject.instance().clear()
make_pdf()
Questo non riesce, in particolare:
i:./assets/generate_board
QGraphicsScene::addItem: item has already been added to this scene
Traceback (most recent call last):
File "./assets/generate_board", line 30, in <module>
make_pdf()
File "./assets/generate_board", line 24, in make_pdf
map_item.setMapCanvas(canvas)
AttributeError: 'NoneType' object has no attribute 'setMapCanvas'
Ho basato questo fuori dalla vista del compositore Salva Stampa / Mappa QGIS come PNG / PDF usando Python (senza cambiare nulla nel layout visibile)? ma modificato per semplificare il più possibile. Sembra che abbia rotto qualcosa nel processo ... Non ho questo file modello. Ho semplicemente un file di progetto board.qgs con una scheda compositore36x48. Qualche idea?
qgs = QgsApplication(sys.argv, True)
conapp = QtGui.QApplication(sys.argv, True)
eqgs.initQgis()
conQgsApplication.initQgis()
?