Nhà soạn nhạc xuất khẩu của QGIS dưới dạng pdf trong python


11

Tôi có một dự án QGIS có chứa một nhà soạn nhạc. Tất nhiên, nếu tôi đi vào GUI, tôi có thể xuất nó dưới dạng pdf, v.v. Đối với tập lệnh tạo của tôi mặc dù tôi muốn thực hiện điều này thông qua tập lệnh python. Từ đọc trực tuyến ở đây là nỗ lực của tôi:

#!/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ều này không thành công, cụ thể:

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'

Tôi đã dựa trên chế độ này của chế độ xem của nhà soạn nhạc Save Print / Map dưới dạng PNG / PDF bằng Python (mà không thay đổi bất cứ điều gì trong bố cục có thể nhìn thấy)? nhưng sửa đổi nó để đơn giản hóa càng nhiều càng tốt. Có vẻ như tôi đã phá vỡ một cái gì đó trong quá trình ... Tôi không có tệp mẫu này. Tôi đơn giản có một tệp dự án board.qss với bảng soạn thảo36x48. Có ý kiến ​​gì không?


Hãy thử thay thế qgs = QgsApplication(sys.argv, True)bằng app = QtGui.QApplication(sys.argv, True)qgs.initQgis()bằng QgsApplication.initQgis()?
Giuse

Bạn có thể tìm thấy một số đoạn mã hữu ích ở đây trong plugin Maps_printer: github.com/DelazJ/MapsPrinter/wiki . Tìm def saveFile (self):, def printToRaster (self, cView, thư mục, tên, ext):, def exportCompo (self, cView, thư mục, title, phần mở rộng):
gisnside

bạn đã làm cho nó hoạt động?
Hugo Roussaffa - GeoDatup

Câu trả lời:


1

Bạn đang cố gắng tạo mục QssComposerMap từ tên nhà soạn nhạc hoàn chỉnh của bạn!

map_item = composition.getComposerItemById('board36x48')

thay vào đó hãy sử dụng ID của thành phần bản đồ trong trình soạn thảo của bạn (map; map0; map1 ...). Bạn đã xác định nó khi bạn tạo nhà soạn nhạc của bạn.

Theo các đoạn mã khác là ok, bạn nên làm cho nó hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.