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