管道基础大数据平台系统开发-【CS】-ExportMap
1
13693261870
2024-09-04 dbed0354a00fde9db87862b9f03db0fbf0d3aabc
ExportMap/Sources/xyz2.py
@@ -7,6 +7,7 @@
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 *
@@ -28,19 +29,18 @@
    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\png2", required=False)
    parser.add_argument("-file", type=str, default=r"D:\LF\data\xyz\tif.txt", required=False)
    parser.add_argument("-out", type=str, default=r"D:\LF\data\xyz", required=False)
    parser.add_argument("-min", type=int, default=12, required=False)
    parser.add_argument("-max", type=int, default=15, required=False)
    parser.add_argument("-noData", type=int, default=0, required=False)
    parser.add_argument("-authid", type=int, default=4490, required=False)
    parser.add_argument("-noData", type=int, default=255, required=False)
    return parser.parse_args()
# 读取文本文件
def readTxt(filePath):
    f = open(filePath, encoding="utf-8")
def read_txt(path):
    f = open(path, encoding="utf-8")
    lines = f.readlines()
    f.close()
@@ -51,20 +51,30 @@
# 加载图层
def loadLayers(prj, args):
def load_layers(prj, args):
    for layer in prj.mapLayers().values():
        prj.removeMapLayer(layer)
    lines = readTxt(args.file)
    layer = None
    args.crs = None
    lines = read_txt(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))
        strs = lines[i].split(",")
        prefix = "__" if "1" == strs[1] else "_"
        print("layer" + prefix + str(i) + ": " + strs[0])
        layer = QgsRasterLayer(strs[0], "layer" + prefix + str(i))
        if not layer.isValid() or layer.crs() is None:
            print("layer_" + str(i) + ": failed to load!")
            print("layer" + prefix + str(i) + ": failed to load!")
            continue
        if args.crs is None and len(layer.crs().authid()) > 0:
            args.crs = layer.crs()
            prj.setCrs(layer.crs())
            print("prj.authid: " + args.crs.authid())
        for j in range(1, layer.bandCount() + 1):
            try:
@@ -73,6 +83,10 @@
                print(e)
        prj.addMapLayer(layer)
    if args.crs is None and layer is not None:
        args.crs = layer.crs()
        prj.setCrs(layer.crs())
# 边界类
@@ -85,7 +99,7 @@
# 获取XYZ参数
def getXYZOps(args):
def get_xyz_ops(args):
    ops = {
        'BACKGROUND_COLOR': QColor(0, 0, 0, 0),
        'DPI': 96,
@@ -108,15 +122,29 @@
# 创建XYZ瓦片
def createXYZ(prj, args):
def create_xyz(prj, args):
    import processing
    authid = args.crs.authid()
    for layer in prj.mapLayers().values():
        e = layer.extent()
        prj.setCrs(layer.crs())
        epsg = '' if layer.crs() is None else ' [' + layer.crs().authid() + ']'
        args.ext = str(e.xMinimum()) + "," + str(e.xMaximum()) + "," + str(e.yMinimum()) + "," + str(e.yMaximum()) + epsg
        ops = getXYZOps(args)
        if "layer__" in layer.id():
            continue
        rect = layer.extent()
        if authid != layer.crs().authid():
            transform = QgsCoordinateTransform(layer.crs(), args.crs, prj)
            min = QgsPoint(rect.xMinimum(), rect.yMinimum())
            max = QgsPoint(rect.xMaximum(), rect.yMaximum())
            min.transform(transform)
            max.transform(transform)
            args.ext = str(min.x()) + "," + str(max.x()) + "," + \
                       str(min.y()) + "," + str(max.y()) + ' [' + authid + ']'
        else:
            args.ext = str(rect.xMinimum()) + "," + str(rect.xMaximum()) + "," + \
                       str(rect.yMinimum()) + "," + str(rect.yMaximum()) + ' [' + authid + ']'
        ops = get_xyz_ops(args)
        processing.run("qgis:tilesxyzdirectory", ops)
@@ -133,11 +161,11 @@
    # prj.read(args.qgz)
    print("FileName: " + prj.fileName())
    loadLayers(prj, args)
    load_layers(prj, args)
    # prj.write(args.file.replace(".txt", ".qgz"))
    # args.ext = getExtent(prj, args)
    createXYZ(prj, args)
    create_xyz(prj, args)
    qgs.exitQgis()