管道基础大数据平台系统开发-【CS】-ExportMap
1
13693261870
2024-09-05 95d9356edef73a1ad5b04e62b7aef6b77697a226
ExportMap/Sources/merge.py
@@ -28,15 +28,14 @@
    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)
    parser.add_argument("-file", type=str, default=r"D:\xyz\dem\dem.txt", required=False)
    parser.add_argument("-out", type=str, default=r"D:\xyz\dem\out.tif", required=False)
    return parser.parse_args()
# 读取文本文件
def readTxt(filePath):
def read_txt(filePath):
    f = open(filePath, encoding="utf-8")
    lines = f.readlines()
    f.close()
@@ -48,12 +47,12 @@
# 加载图层
def loadLayers(prj, args):
def load_layers(prj, args):
    for layer in prj.mapLayers().values():
        prj.removeMapLayer(layer)
    args.authid = None
    lines = readTxt(args.file)
    lines = read_txt(args.file)
    for i in range(0, len(lines)):
        if len(lines[i]) == 0:
            continue
@@ -69,29 +68,28 @@
            print("authid: " + args.authid)
            prj.setCrs(layer.crs())
        for j in range(1, layer.bandCount() + 1):
            layer.dataProvider().setNoDataValue(j, args.noData)
        # for j in range(1, layer.bandCount() + 1):
        #     try:
        #         layer.dataProvider().setNoDataValue(j, 0)
        #     except Exception as e:
        #         print(e)
        prj.addMapLayer(layer)
# 获取参数
def getOps(args):
def get_ops(prj, args):
    layers = []
    for layer in prj.mapLayers().values():
        layers.append(layer.name())
    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
        'INPUT': layers,
        'DATA_TYPE': 5,
        'OUTPUT': args.out,
        # 'NODATA_INPUT': 0,
        # 'NODATA_OUTPUT': 0,
        'OPTIONS': ''
    }
    print(ops)
@@ -99,11 +97,36 @@
# 合并
def merge(args):
def merge(prj, args):
    import processing
    ops = getOps(args)
    processing.run("qgis:tilesxyzdirectory", ops)
    ops = get_ops(prj, args)
    processing.run("gdal:merge", ops)
# 获取中心点坐标
def get_coord(prj, args):
    layer = QgsRasterLayer(args.out, "layer_tif")
    rect = layer.extent()
    x = (rect.xMinimum() + rect.xMaximum()) / 2
    y = (rect.yMinimum() + rect.yMaximum()) / 2
    sid = layer.crs().authid()
    if sid != "EPSG:4490" and sid != "EPSG:4326":
        sid = "EPSG:4490" if layer.crs().toWkt().find("CGCS2000") > -1 else "EPSG:4326"
        transform = QgsCoordinateTransform(QgsCoordinateReferenceSystem(layer.crs().authid()), QgsCoordinateReferenceSystem(sid), prj)
        p = QgsPoint(x, y)
        p.transform(transform)
        x = p.x()
        y = p.y()
    coord = str(x) + ", " + str(y) + ", " + str(sid)
    print(coord)
    f = open(args.out.replace(".tif", "_cs.txt"), 'w')
    f.write(coord)
    f.close()
# 初始化
@@ -119,9 +142,9 @@
    # prj.read(args.qgz)
    print("FileName: " + prj.fileName())
    loadLayers(prj, args)
    merge(args)
    load_layers(prj, args)
    merge(prj, args)
    get_coord(prj, args)
    qgs.exitQgis()
@@ -130,4 +153,5 @@
if __name__ == '__main__':
    timer = time.time()
    init()
    print(f'耗时:{time.time() - timer:.2f}s')