Compositor de exportação QGIS como pdf em python


11

Eu tenho um projeto QGIS que contém um compositor. É claro que se eu entrar na GUI, posso exportá-lo como um pdf, etc. Para o meu script make, eu quero que isso seja feito através de um script python. Da leitura online aqui está a minha tentativa:

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

Isso falha, especificamente:

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'

Eu baseei este fora de Memorizar Imprimir / vista compositor Mapa QGIS como PNG / PDF usando Python (sem mudar nada no layout visível)? mas modificou para simplificar o máximo possível. Parece que quebrei algo no processo ... Não tenho esse arquivo de modelo. Simplesmente tenho um arquivo de projeto board.qgs com um compositor board36x48. Alguma ideia?


Tente substituir qgs = QgsApplication(sys.argv, True)por app = QtGui.QApplication(sys.argv, True)e qgs.initQgis()com QgsApplication.initQgis()?
1955 Joseph

Você pode encontrar algum trecho de código útil aqui no plug-in Maps_printer : github.com/DelazJ/MapsPrinter/wiki . Procure def saveFile (self) :, def printToRaster (self, CView, pasta, nome, ext) :, def exportCompo (self, CView, pasta, título, extensão):
gisnside

Respostas:


1

Você está tentando criar o item QgsComposerMap com o nome completo do compositor!

map_item = composition.getComposerItemById('board36x48')

use o ID do componente do mapa no seu compositor (mapa; mapa0; mapa1 ...). Você o definiu ao criar seu compositor.

De acordo com outro trecho de código, você deve fazê-lo funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.