Komponis ekspor QGIS sebagai pdf dengan python


11

Saya punya proyek QGIS yang berisi komposer. Tentu saja jika saya masuk ke GUI saya dapat mengekspornya sebagai pdf dll. Untuk membuat skrip saya meskipun saya ingin ini dilakukan melalui skrip python. Dari membaca online di sini adalah usaha saya:

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

Ini gagal, khususnya:

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'

Saya mendasarkan ini dari tampilan Simpan Cetak / Peta QGIS komposer sebagai PNG / PDF menggunakan Python (tanpa mengubah apa pun dalam tata letak yang terlihat)? tetapi memodifikasinya untuk menyederhanakan sebanyak mungkin. Sepertinya saya memecahkan sesuatu dalam proses ... Saya tidak punya file templat ini. Saya sederhana memiliki file proyek board.qgs dengan komposer board36x48. Ada ide?


Coba ganti qgs = QgsApplication(sys.argv, True)dengan app = QtGui.QApplication(sys.argv, True)dan qgs.initQgis()dengan QgsApplication.initQgis()?
Joseph

Anda mungkin menemukan beberapa kode yang berguna di sini di plugin Maps_printer : github.com/DelazJ/MapsPrinter/wiki . Cari def saveFile (self) :, def printToRaster (self, cView, folder, name, ext) :, def exportCompo (self, cView, folder, judul, ekstensi):
gisnside

Apakah Anda berhasil?
Hugo Roussaffa - GeoDatup

Jawaban:


1

Anda mencoba membuat item QgsComposerMap dari nama komposer lengkap Anda!

map_item = composition.getComposerItemById('board36x48')

gunakan sebaliknya ID komponen peta di komposer Anda (peta; map0; map1 ...). Anda mendefinisikannya saat Anda membuat komposer Anda.

Menurut potongan kode lain ok, Anda harus membuatnya bekerja.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.