QGISエクスポートコンポーザーをPythonでPDFとしてエクスポート


11

作曲家を含むQGISプロジェクトがあります。もちろん、GUIに移動すると、pdfなどとしてエクスポートできます。makeスクリプトの場合は、Pythonスクリプトを使用してこれを実行します。ここでオンラインで読むことから私の試みです:

#!/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()

これは特に失敗します:

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'

私はこのオフに基づいて(目に見えるレイアウトには何も変更せず)のPythonを使用してPNG / PDFとして保存印刷/地図QGIS作曲ビューを?ただし、可能な限り簡素化するために変更しました。途中で何かを壊したようです...このテンプレートファイルがありません。作曲家board36x48を使用してboard.qgsプロジェクトファイルを作成しました。何か案は?


交換してみてくださいqgs = QgsApplication(sys.argv, True)app = QtGui.QApplication(sys.argv, True)してqgs.initQgis()QgsApplication.initQgis()
ジョセフ

あなたはMaps_printerプラグインで、ここでのコードのいくつかの有用な部分を見つけるかもしれない:github.com/DelazJ/MapsPrinter/wikiを。def saveFile(self):, def printToRaster(self、cView、folder、name、ext):, def exportCompo(self、cView、folder、title、extension):
gisnside

うまくいきましたか?
ヒューゴルーサファ-GeoDatup

回答:


1

完全な作曲家名からQgsComposerMapアイテムを作成しようとしています!

map_item = composition.getComposerItemById('board36x48')

代わりに、コンポーザのマップコンポーネントのID(map; map0; map1 ...)を使用します。コンポーザーを作成するときに定義しました。

他のコードも大丈夫だと思うので、それを動作させるべきです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.