Tự động hóa nhà soạn nhạc dự án QGIS?


9

Tôi có một dự án lớn bao gồm khoảng 10 tệp dự án QGIS. Mỗi dự án chứa một nhà soạn nhạc in với tập bản đồ được thiết lập để tạo tối đa 10 bản đồ.

Cách dễ nhất để tự động hóa việc mở từng dự án và tạo tệp PDF bằng tập bản đồ là gì?

(Một cái gì đó như thế này sẽ rất lý tưởng - không chắc là có thể không)

C: \ OSGeo4W \ bin \ qgis.bat --project MyProject1.qss --code SaveAtlasAsPdf.py C: \ OSGeo4W \ bin \ qgis.bat --project MyProject2.qss --code SaveAtlasAsPdf.py

Câu trả lời:


9

Lưu tệp này trong tệp Python và sử dụng nó trong --code arg sẽ làm những gì bạn cần:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import os

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

for comp in iface.activeComposers():
    print comp
    folder = r"C:\temp"
    title = "testing"
    printer = QPrinter()
    painter = QPainter()
    comp.composition().setUseAdvancedEffects(False)
    myAtlas = comp.composition().atlasComposition()

    if myAtlas.enabled():
        myAtlas.beginRender()
        comp.composition().setAtlasMode(QgsComposition.ExportAtlas)
        myAtlas.setFilenamePattern(u"'{}_'||$feature".format(title))
        for i in range(0, myAtlas.numFeatures()):
            myAtlas.prepareForFeature(i)
            filename = os.path.join(folder, title + '.pdf')
            print filename
            comp.composition().beginPrintAsPDF(printer, filename)
            comp.composition().beginPrint(printer)
            printReady = painter.begin(printer)
            if i > 0:
                printer.newPage()
            comp.composition().doPrint(printer, painter)
        myAtlas.endRender()
        painter.end()

Điều này sẽ lặp tất cả các nhà soạn nhạc và in chúng nếu chúng có bản đồ được kích hoạt thành một tệp PDF cho mỗi bản.

LƯU Ý Bạn có thể mở tệp dự án trong phiên QGIS bằng cách sử dụng iface.addProject. Vì vậy, bạn có thể làm điều này để tránh mở nhiều phiên QGIS.

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import os

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

def print_it():
    for comp in iface.activeComposers():
        print comp
        folder = r"C:\temp"
        title = "testing"
        printer = QPrinter()
        painter = QPainter()
        comp.composition().setUseAdvancedEffects(False)
        myAtlas = comp.composition().atlasComposition()

        if myAtlas.enabled():
            myAtlas.beginRender()
            comp.composition().setAtlasMode(QgsComposition.ExportAtlas)
            myAtlas.setFilenamePattern(u"'{}_'||$feature".format(title))
            for i in range(0, myAtlas.numFeatures()):
                myAtlas.prepareForFeature(i)
                filename = os.path.join(folder, title + '.pdf')
                print filename
                comp.composition().beginPrintAsPDF(printer, filename)
                comp.composition().beginPrint(printer)
                printReady = painter.begin(printer)
                if i > 0:
                    printer.newPage()
                comp.composition().doPrint(printer, painter)
            myAtlas.endRender()
            painter.end()

for project in projectlist:
    iface.addProject(project)
    print_it()

Bài liên quan và câu trả lời tuyệt vời!
GIỎ HÀNG

Tôi sẽ cho rằng nó làm việc? Bạn có thể sử dụng sys.exit()để đóng QGIS khi hoàn tất.
Nathan W

Vâng, nó hoạt động hoàn hảo. Tôi đã thực sự cố gắng tìm cách để thoát ra. Tôi đã thử iface.actionExit (). Trigger () và sys.exit () nhưng vì một số lý do chúng không hoạt động.
Damien

Hãy thửQgsApplication.exit()
Nathan W

iface.actionExit()sẽ hiển thị một hộp thoại nếu dự án đã thay đổi và chặn lối ra, so với QgsApplication.exit()đó sẽ chỉ là quá trình.
Nathan W
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.