From fe75d21f8897f297fdd9ca7a66628180c189228a Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 05 五月 2023 15:19:27 +0800 Subject: [PATCH] 1 --- ExportMap/Sources/merge.py | 133 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 133 insertions(+), 0 deletions(-) diff --git a/ExportMap/Sources/merge.py b/ExportMap/Sources/merge.py new file mode 100644 index 0000000..92d7b46 --- /dev/null +++ b/ExportMap/Sources/merge.py @@ -0,0 +1,133 @@ +#!/usr/bin/env +# -*- coding: utf-8 -*- + + +import os +import sys +import time + +sys.path.append(r"C:\Program Files\QGIS 3.16\apps\qgis-ltr\python\plugins") +import math +import argparse +from qgis.core import * +from qgis.gui import * +from qgis.PyQt.QtGui import * +from qgis.PyQt.QtCore import * +from qgis.PyQt.QtWidgets import * +from processing.core.Processing import Processing + + +# 鑾峰彇瀹屾暣璺緞 +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=r"xyz.qgz", required=False) + parser.add_argument("-file", type=str, default=r"D:\xyz\dom0.2m\tif.txt", required=False) + parser.add_argument("-out", type=str, default=r"D:\xyz\dom0.2m\png", required=False) + parser.add_argument("-noData", type=int, default=0, required=False) + + return parser.parse_args() + + +# 璇诲彇鏂囨湰鏂囦欢 +def readTxt(filePath): + f = open(filePath, encoding="utf-8") + lines = f.readlines() + f.close() + + for i in range(0, len(lines)): + lines[i] = lines[i].replace('\n', '') + + return lines + + +# 鍔犺浇鍥惧眰 +def loadLayers(prj, args): + for layer in prj.mapLayers().values(): + prj.removeMapLayer(layer) + + args.authid = None + lines = readTxt(args.file) + for i in range(0, len(lines)): + if len(lines[i]) == 0: + continue + + print("layer_" + str(i) + ": " + lines[i]) + layer = QgsRasterLayer(lines[i], "layer_" + str(i)) + if not layer.isValid() or layer.crs() is None: + print("layer_" + str(i) + ": failed to load!") + continue + + if len(prj.mapLayers()) == 0: + args.authid = layer.crs().authid() + print("authid: " + args.authid) + prj.setCrs(layer.crs()) + + for j in range(1, layer.bandCount() + 1): + layer.dataProvider().setNoDataValue(j, args.noData) + + prj.addMapLayer(layer) + + +# 鑾峰彇鍙傛暟 +def getOps(args): + ops = { + 'BACKGROUND_COLOR': QColor(0, 0, 0, 0), + 'DPI': 96, + 'EXTENT': args.ext, + 'METATILESIZE': 4, + 'OUTPUT_DIRECTORY': args.out, + # 'OUTPUT_HTML': 'TEMPORARY_OUTPUT', + 'OUTPUT_HTML': args.out + "\\view.html", + 'QUALITY': 100, + 'TILE_FORMAT': 0, + 'TILE_HEIGHT': 256, + 'TILE_WIDTH': 256, + 'TMS_CONVENTION': False, + 'ZOOM_MAX': args.max, + 'ZOOM_MIN': args.min + } + print(ops) + + return ops + + +# 鍚堝苟 +def merge(args): + import processing + + ops = getOps(args) + processing.run("qgis:tilesxyzdirectory", ops) + + +# 鍒濆鍖� +def init(): + # QgsApplication.setPrefixPath("C:\Program Files\QGIS 3.16", True) + qgs = QgsApplication([], False) + qgs.initQgis() + Processing.initialize() + + args = get_args() + prj = QgsProject.instance() + prj.read(os.path.join(args.src, args.qgz)) + # prj.read(args.qgz) + print("FileName: " + prj.fileName()) + + loadLayers(prj, args) + + merge(args) + + qgs.exitQgis() + + +# main +if __name__ == '__main__': + timer = time.time() + init() + print(f'鑰楁椂:{time.time() - timer:.2f}s') -- Gitblit v1.9.3