Композитор експорту QGIS у форматі pdf у python


11

У мене є проект QGIS, який містить композитора. Звичайно, якщо я заходжу в графічний інтерфейс, я можу експортувати його як 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'

Я ґрунтувався на цьому, щоб композитор View QGIS Save Save / Map 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 (self) :, def printToRaster (self, cView, папка, ім'я, ext):, def exportCompo (self, cView, папка, назва, розширення):
gisnside

ти змусив це працювати?
Хьюго Руссаффа - GeoDatup

Відповіді:


1

Ви намагаєтесь створити елемент QgsComposerMap зі свого повного імені композитора!

map_item = composition.getComposerItemById('board36x48')

використовуйте замість ідентифікатора компонента карти у вашому композиторі (map; map0; map1 ...). Ви визначили це під час створення свого композитора.

Згідно з іншим фрагментом коду все в порядку, ви повинні змусити його працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.