Ich habe ein QGIS-Projekt, das einen Komponisten enthält. Wenn ich in die GUI gehe, kann ich sie natürlich als PDF usw. exportieren. Für mein Make-Skript möchte ich dies jedoch über ein Python-Skript erledigen lassen. Vom Online-Lesen hier ist mein Versuch:
#!/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()
Dies schlägt insbesondere fehl:
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'
Ich habe dies aus der QGIS-Composer-Ansicht "Drucken / Karten speichern" als PNG / PDF mit Python erstellt (ohne das sichtbare Layout zu ändern). aber geändert, um so viel wie möglich zu vereinfachen. Es scheint, als hätte ich dabei etwas kaputt gemacht ... Ich habe diese Vorlagendatei nicht. Ich habe einfach eine board.qgs-Projektdatei mit einem Composer board36x48. Irgendwelche Ideen?
qgs = QgsApplication(sys.argv, True)
durchapp = QtGui.QApplication(sys.argv, True)
undqgs.initQgis()
mit zu ersetzenQgsApplication.initQgis()
?