นักแต่งเพลงส่งออก QGIS เป็น pdf ในหลาม


11

ฉันมีโครงการ QGIS ซึ่งมีนักแต่งเพลง แน่นอนว่าถ้าฉันเข้าสู่ GUI ฉันสามารถส่งออกเป็น pdf และอื่น ๆ สำหรับสคริปต์ทำของฉันแม้ว่าฉันต้องการทำสิ่งนี้ผ่านสคริปต์ 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'

ฉันใช้มุมมองนักแต่งเพลงบันทึกการพิมพ์ / แผนที่ QGIS นี้เป็น PNG / PDF โดยใช้ Python (โดยไม่ต้องเปลี่ยนอะไรในเค้าโครงที่มองเห็นได้)? แต่ปรับเปลี่ยนเพื่อลดความซับซ้อนให้มากที่สุด ดูเหมือนว่าฉันจะทำอะไรบางอย่างขาดกระบวนการ ... ฉันไม่มีไฟล์เทมเพลตนี้ ฉันมีไฟล์โครงการ board.qgs ที่เรียบง่ายด้วยบอร์ดแต่ง 36x48 ความคิดใด ๆ


ลองแทนที่qgs = QgsApplication(sys.argv, True)ด้วยapp = QtGui.QApplication(sys.argv, True)และqgs.initQgis()ด้วยQgsApplication.initQgis()?
โจเซฟ

คุณอาจพบชิ้นส่วนที่มีประโยชน์บางส่วนของรหัสที่นี่ในปลั๊กอิน Maps_printer: github.com/DelazJ/MapsPrinter/wiki ค้นหา def saveFile (ตัวเอง):, def printToRaster (ตัวเอง, cView, โฟลเดอร์, ชื่อ, ส่วนขยาย):, def exportCompo (ตัวเอง, cView, โฟลเดอร์, ชื่อ, ส่วนขยาย):
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.