Python'da pdf olarak QGIS ihracat bestecisi


11

Bir besteci içeren bir QGIS projem var. Tabii ki GUI içine giderseniz ben bir pdf vb olarak ihraç edebilirsiniz. Ama benim bir senaryo için bu bir python komut dosyası ile yapmak istiyorum rağmen. Online okumadan denemem burada:

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

Bu başarısız olur, özellikle:

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'

Ben Python (görünür düzende hiçbir şey değiştirmeden) kullanarak Baskı / Harita QGIS besteci görünümü PNG / PDF olarak bu dayalı ? ancak mümkün olduğunca basitleştirmek için değiştirdi. Görünüşe göre süreçte bir şey kırdım ... Bu şablon dosyası yok. Basit bir besteci board36x48 ile bir board.qgs proje dosyası var. Herhangi bir fikir?


Değiştirmeyi deneyin qgs = QgsApplication(sys.argv, True)ile app = QtGui.QApplication(sys.argv, True)ve qgs.initQgis()ile QgsApplication.initQgis()?
Joseph

Maps_printer eklentisinde bazı yararlı kodlar bulabilirsiniz: github.com/DelazJ/MapsPrinter/wiki . Def saveFile (self) :, def arayın PrintToRaster (self, cView, klasör, ad, dahili) :, def exportCompo (self, cView, klasör, başlık, uzantı):
gisnside 5:17

işe aldın mı
Hugo Roussaffa - GeoDatup

Yanıtlar:


1

Tüm besteci adınızdan QgsComposerMap öğesini oluşturmaya çalışıyorsunuz!

map_item = composition.getComposerItemById('board36x48')

bunun yerine bestecinizdeki harita bileşeninin kimliğini kullanın (map; map0; map1 ...). Bestecinizi oluştururken tanımladınız.

Diğer kod parçası tamam göre, onu işe almak gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.