파이썬에서 PDF로 QGIS 내보내기 작성기


11

작곡가를 포함하는 QGIS 프로젝트가 있습니다. 물론 GUI로 들어가면 pdf 등으로 내보낼 수 있습니다. 파이썬 스크립트를 통해이 작업을 수행하고 싶지만 make 스크립트를 위해. 온라인에서 읽은 내용은 다음과 같습니다.

#!/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'

나는이 기반으로 (볼 레이아웃에서 아무것도 변경하지 않고) 파이썬을 사용하여 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

작동 했습니까?
Hugo Roussaffa-GeoDatup

답변:


1

완전한 작성기 이름에서 QgsComposerMap 항목을 작성하려고합니다!

map_item = composition.getComposerItemById('board36x48')

대신 작곡가에서지도 구성 요소의 ID를 사용하십시오 (map; map0; map1 ...). 작곡가를 만들 때 정의했습니다.

다른 코드 조각에 따르면 괜찮습니다. 작동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.