¶Ô±ÈÐÂÎļþ |
| | |
| | | #!/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') |