管道基础大数据平台系统开发-【CS】-ExportMap
1
13693261870
2023-05-05 f08ba7f77594febf9108678e9424848cdc6dd7c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/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\dem\dem.txt", required=False)
    parser.add_argument("-out", type=str, default=r"D:\xyz\dem\dem\astgtm2.tif", required=False)
 
    return parser.parse_args()
 
 
# 读取文本文件
def read_txt(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 load_layers(prj, args):
    for layer in prj.mapLayers().values():
        prj.removeMapLayer(layer)
 
    args.authid = 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))
        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())
 
        prj.addMapLayer(layer)
 
 
# 获取参数
def get_ops(prj, args):
    layers = []
    for layer in prj.mapLayers().values():
        layers.append(layer.name())
 
    ops = {
        'INPUT': layers,
        'DATA_TYPE': 5,
        'OUTPUT': args.out,
        'NODATA_INPUT': 0,
        'NODATA_OUTPUT': 0,
        'OPTIONS': ''
    }
    print(ops)
 
    return ops
 
 
# 合并
def merge(prj, args):
    import processing
 
    ops = get_ops(prj, args)
    processing.run("gdal:merge", 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())
 
    load_layers(prj, args)
    merge(prj, args)
 
    qgs.exitQgis()
 
 
# main
if __name__ == '__main__':
    timer = time.time()
    init()
 
    print(f'耗时:{time.time() - timer:.2f}s')