管道基础大数据平台系统开发-【CS】-ExportMap
1
13693261870
2024-09-04 dbed0354a00fde9db87862b9f03db0fbf0d3aabc
ExportMap/Sources/xyz.py
@@ -31,15 +31,15 @@
    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("-min", type=int, default=12, required=False)
    parser.add_argument("-max", type=int, default=18, required=False)
    parser.add_argument("-max", type=int, default=15, 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")
def read_txt(path):
    f = open(path, encoding="utf-8")
    lines = f.readlines()
    f.close()
@@ -50,12 +50,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)
    args.crs = None
    lines = read_txt(args.file)
    for i in range(0, len(lines)):
        if len(lines[i]) == 0:
            continue
@@ -67,12 +67,15 @@
            continue
        if len(prj.mapLayers()) == 0:
            args.authid = layer.crs().authid()
            print("authid: " + args.authid)
            args.crs = layer.crs()
            print("authid: " + args.crs.authid())
            prj.setCrs(layer.crs())
        for j in range(1, layer.bandCount() + 1):
            layer.dataProvider().setNoDataValue(j, args.noData)
            try:
                layer.dataProvider().setNoDataValue(j, args.noData)
            except Exception as e:
                print(e)
        prj.addMapLayer(layer)
@@ -85,33 +88,36 @@
        self.ymin = ymin
        self.ymax = ymax
# 获取边界
def getExtent(prj, args):
def get_extent(prj, args):
    ex = None
    for layer in prj.mapLayers().values():
        rect = layer.extent()
        if ex is None:
            # print(layer.extent().asWktCoordinates()); geo = QgsGeometry.fromWkt(layer.extent().asWktPolygon())
            ex = Rectangle(rect.xMinimum(), rect.xMaximum(), rect.yMinimum(), rect.yMaximum())
            continue
        if args.authid != layer.crs().authid():
            transform = QgsCoordinateTransform(QgsCoordinateReferenceSystem(layer.crs().authid()), QgsCoordinateReferenceSystem(args.authid), prj)
        if args.crs.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)
            setRectBound(ex, min.x(), min.y(), max.x(), max.y())
            set_rect_bound(ex, min.x(), min.y(), max.x(), max.y())
        else:
            setRectBound(ex, rect.xMinimum(), rect.yMinimum(), rect.xMaximum(), rect.yMaximum())
            set_rect_bound(ex, rect.xMinimum(), rect.yMinimum(), rect.xMaximum(), rect.yMaximum())
    # 123543.6722,2730986.0671,2732253.9315,3552923.0518 [EPSG:32643]
    # return '38400309.1314,38403253.7083,3559920.4768,3561690.3144 [CGCS2000 / 3-degree Gauss-Kruger zone 38]'
    return str(ex.xmin) + "," + str(ex.xmax) + "," + str(ex.ymin) + "," + str(ex.ymax) + ' [' + args.authid + "]"
    return str(ex.xmin) + "," + str(ex.xmax) + "," + str(ex.ymin) + "," + str(ex.ymax) + ' [' + args.crs.authid() + "]"
# 设置矩形边界
def setRectBound(ex, xmin, ymin, xmax, ymax):
def set_rect_bound(ex, xmin, ymin, xmax, ymax):
    if xmin < ex.xmin:
        ex.xmin = xmin
    if ymin < ex.ymin:
@@ -122,33 +128,8 @@
        ex.ymax = ymax
def getExtent2(prj, args):
    ex = None
    for layer in prj.mapLayers().values():
        rect = layer.extent()
        print(layer.name() + ", " + rect.toString() + ", " + layer.crs().authid())
        if ex is None:
            ex = Rectangle(rect.xMinimum(), rect.xMaximum(), rect.yMinimum(), rect.yMaximum())
            # print(layer.extent().asWktCoordinates())
            geo = QgsGeometry.fromWkt(layer.extent().asWktPolygon())
            continue
        if rect.xMinimum() < ex.xmin:
            ex.xmin = rect.xMinimum()
        if rect.yMinimum() < ex.ymin:
            ex.ymin = rect.yMinimum()
        if rect.xMaximum() > ex.xmax:
            ex.xmax = rect.xMaximum()
        if rect.yMaximum() > ex.ymax:
            ex.ymax = rect.yMaximum()
    # '-3640.3675,1734588.1947,2434663.1477,3677421.7047 [EPSG:32643]'
    return str(ex.xmin) + "," + str(ex.xmax) + "," + str(ex.ymin) + "," + str(ex.ymax) + ' [' + args.authid + "]"
# 获取XYZ参数
def getXYZOps(args):
def get_xyz_ops(args):
    ops = {
        'BACKGROUND_COLOR': QColor(0, 0, 0, 0),
        'DPI': 96,
@@ -171,10 +152,10 @@
# 创建XYZ瓦片
def createXYZ(args):
def create_xyz(args):
    import processing
    ops = getXYZOps(args)
    ops = get_xyz_ops(args)
    processing.run("qgis:tilesxyzdirectory", ops)
@@ -191,11 +172,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(args)
    args.ext = get_extent(prj, args)
    create_xyz(args)
    qgs.exitQgis()