| | |
| | | #!/usr/bin/env |
| | | # -*- coding: utf-8 -*- |
| | | import os |
| | | import sys |
| | | import math |
| | | import argparse |
| | | from qgis.core import * |
| | | from qgis.gui import * |
| | | from qgis.PyQt.QtGui import * |
| | |
| | | from qgis.PyQt.QtXml import * |
| | | |
| | | |
| | | # 获取完整路径 |
| | | def get_full_path(): |
| | | return os.path.split(sys.argv[0])[0] |
| | | |
| | | |
| | | # 获取参数 |
| | | def get_args(): |
| | | print("argv = ", sys.argv[1:]) |
| | | parser = argparse.ArgumentParser(description='ArgUtils') |
| | | parser.add_argument("-src", type=str, default=get_full_path(), required=False) |
| | | parser.add_argument("-qgz", type=str, default="Test.qgz", required=False) |
| | | parser.add_argument("-qpt", type=str, default="Test.qpt", required=False) |
| | | |
| | | return parser.parse_args() |
| | | |
| | | |
| | | # 设置图层可用性 |
| | | def setLayersValid(project, showLayers): |
| | | for layer in project.mapLayers().values(): |
| | | flag = layer.name() in showLayers |
| | | def set_layers_valid(prj, show_layers): |
| | | for layer in prj.mapLayers().values(): |
| | | flag = layer.name() in show_layers |
| | | print(layer.name() + ": " + str(flag)) |
| | | # if not flag: |
| | | # project.removeMapLayer(layer) |
| | |
| | | |
| | | |
| | | # 设置图层可见性 |
| | | def setItemVisibility(root, showLayers): |
| | | print(root.name() + ': Group') |
| | | for node in root.children(): |
| | | def set_item_visibility(root_node, show_layers): |
| | | print(root_node.name() + ': Group') |
| | | for node in root_node.children(): |
| | | # QgsLayerTreeLayer |
| | | if isinstance(node, QgsLayerTreeGroup): |
| | | setItemVisibility(node, showLayers) |
| | | set_item_visibility(node, show_layers) |
| | | # QgsRasterLayer, QgsVectorLayer |
| | | else: |
| | | name = node.layer().name() |
| | | flag = name in showLayers |
| | | print(name + ": " + str(flag)) |
| | | # if not flag: |
| | | # root.removeLayer(node.layer()) |
| | | # root_node.removeLayer(node.layer()) |
| | | # node.layer().setValid(False) |
| | | node.setItemVisibilityChecked(flag) |
| | | |
| | | |
| | | QgsApplication.setPrefixPath(r"C:/Program Files/QGIS 3.16/bin", True) |
| | | # 初始化 |
| | | # QgsApplication.setPrefixPath(r"E:/terrait/TianJin/LFServer/QGIS/", True) |
| | | qgs = QgsApplication([], True) |
| | | qgs.initQgis() |
| | | |
| | | # 加载工程 |
| | | args = get_args() |
| | | project = QgsProject.instance() |
| | | project.read(r'E:/terrait/TianJin/LFServer/QGIS/Test.qgz') |
| | | # project.read(r'Test.qgz') |
| | | project.read(os.path.join(args.src, args.qgz)) |
| | | print("FileName: " + project.fileName()) |
| | | |
| | | # layout = QgsPrintLayout(project) |
| | | layout = QgsLayout(project) |
| | | # layout.initializeDefaults() |
| | | |
| | | with open(r"E:/terrait/TianJin/LFServer/QGIS/Template.qpt", 'r', encoding='utf-8') as f: |
| | | # 加载模板 |
| | | # with open(r'Test.qpt', 'r', encoding='utf-8') as f: |
| | | with open(os.path.join(args.src, args.qpt), 'r', encoding='utf-8') as f: |
| | | template_content = f.read() |
| | | doc = QDomDocument() |
| | | doc.setContent(template_content) |
| | |
| | | |
| | | # map = layout.itemById(r'地图') |
| | | map = layout.referenceMap() |
| | | map.zoomToExtent(map.extent()) |
| | | print('1:' + str(math.ceil(map.scale()))) |
| | | |
| | | # 设置图层 |
| | | # "阀室", "站场", "管道中心线", "矢量注记", "矢量图", "高德影像注记", "高德影像", "影像注记", "影像图" |
| | | # showLayers = ["阀室", "管道中心线", "矢量注记", "矢量图"] |
| | | showLayers = map.id().split(',') |
| | | showLayers = layout.customProperty("layers").split(',') |
| | | root = project.layerTreeRoot() |
| | | # setLayersValid(project, showLayers) |
| | | setItemVisibility(root, showLayers) |
| | | # set_layers_valid(project, showLayers) |
| | | set_item_visibility(root, showLayers) |
| | | |
| | | layout.refresh() |
| | | collection = layout.pageCollection() |
| | | page = collection.page(0) |
| | | page.refreshItemSize() |
| | | |
| | | # 刷新 |
| | | map.refresh() |
| | | layout.updateBounds() |
| | | layout.refresh() |
| | | |
| | | # 导出 |
| | | exporter = QgsLayoutExporter(layout) |
| | | img_path = os.path.join(r"E:/terrait/TianJin/LFServer/QGIS", "render.png") |
| | | # img_path = os.path.join(r"E:/terrait/TianJin/LFServer/QGIS", "render.png") |
| | | img_path = layout.customProperty("imgPath") |
| | | exporter.exportToImage(img_path, QgsLayoutExporter.ImageExportSettings()) |
| | | |
| | | # 退出 |
| | | qgs.exitQgis() |