From 5f80de49c4a00416591054180bf809a12a76d686 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 07 十一月 2024 16:40:53 +0800 Subject: [PATCH] 1 --- ExportMap/Sources/xyz.py | 92 +++++++++++++++++++++++++-------------------- 1 files changed, 51 insertions(+), 41 deletions(-) diff --git a/ExportMap/Sources/xyz.py b/ExportMap/Sources/xyz.py index 30a053c..85cd51c 100644 --- a/ExportMap/Sources/xyz.py +++ b/ExportMap/Sources/xyz.py @@ -28,18 +28,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\4.5g\tif.txt", required=False) - parser.add_argument("-out", type=str, default=r"D:\xyz\4.5g\png", 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("-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,26 +50,32 @@ # 鍔犺浇鍥惧眰 -def loadLayers(prj, args): +def load_layers(prj, args): for layer in prj.mapLayers().values(): prj.removeMapLayer(layer) - 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 - print("layer: " + lines[i]) + 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.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) @@ -84,45 +90,47 @@ # 鑾峰彇杈圭晫 -def getExtent(prj): +def get_extent(prj, args): ex = None for layer in prj.mapLayers().values(): rect = layer.extent() - print(layer.name() + ", " + rect.toString()) - 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 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() + 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) - # '38399769,38403264,3558330,3561632' - return str(ex.xmin) + "," + str(ex.xmax) + "," + str(ex.ymin) + "," + str(ex.ymax) + set_rect_bound(ex, min.x(), min.y(), max.x(), max.y()) + + else: + 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.crs.authid() + "]" -# 鑾峰彇杈圭晫2 -def getExtent2(prj): - rt = None - for layer in prj.mapLayers().values(): - if rt is None: - rt = layer.extent() - continue - - rt = rt.combineExtentWith(layer.extent()) - - return str(rt.xMinimum()) + "," + str(rt.xMaximum()) + "," + str(rt.yMinimum()) + "," + str(rt.yMaximum()) +# 璁剧疆鐭╁舰杈圭晫 +def set_rect_bound(ex, xmin, ymin, xmax, ymax): + if xmin < ex.xmin: + ex.xmin = xmin + if ymin < ex.ymin: + ex.ymin = ymin + if xmax > ex.xmax: + ex.xmax = xmax + if ymax > ex.ymax: + ex.ymax = ymax # 鑾峰彇XYZ鍙傛暟 -def getXYZOps(args): - return { +def get_xyz_ops(args): + ops = { 'BACKGROUND_COLOR': QColor(0, 0, 0, 0), 'DPI': 96, 'EXTENT': args.ext, @@ -138,14 +146,16 @@ 'ZOOM_MAX': args.max, 'ZOOM_MIN': args.min } + print(ops) + + return ops # 鍒涘缓XYZ鐡︾墖 -def createXYZ(args): +def create_xyz(args): import processing - ops = getXYZOps(args) - print(ops) + ops = get_xyz_ops(args) processing.run("qgis:tilesxyzdirectory", ops) @@ -162,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) - createXYZ(args) + args.ext = get_extent(prj, args) + create_xyz(args) qgs.exitQgis() -- Gitblit v1.9.3