| | |
| | | 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="xyz.qgz", required=False) |
| | | parser.add_argument("-file", type=str, default=r"D:\xyz\dq.txt", required=False) |
| | | parser.add_argument("-out", type=str, default=r"D:\xyz\tiles\dq", required=False) |
| | | parser.add_argument("-min", type=int, default=4, required=False) |
| | | parser.add_argument("-max", type=int, default=18, 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("-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) |
| | | |
| | | 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() |
| | | |
| | |
| | | |
| | | |
| | | # 加载图层 |
| | | 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, 0) |
| | | try: |
| | | layer.dataProvider().setNoDataValue(j, args.noData) |
| | | except Exception as e: |
| | | print(e) |
| | | |
| | | prj.addMapLayer(layer) |
| | | |
| | |
| | | |
| | | |
| | | # 获取边界 |
| | | 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, |
| | |
| | | 'TILE_FORMAT': 0, |
| | | 'TILE_HEIGHT': 256, |
| | | 'TILE_WIDTH': 256, |
| | | 'TMS_CONVENTION': True, |
| | | 'TMS_CONVENTION': False, |
| | | '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) |
| | | |
| | | |
| | |
| | | args = get_args() |
| | | prj = QgsProject.instance() |
| | | prj.read(os.path.join(args.src, args.qgz)) |
| | | # prj.read(args.qgz) |
| | | print("FileName: " + prj.fileName()) |
| | | |
| | | loadLayers(prj, args) |
| | | prj.write(args.file.replace(".txt", ".qgz")) |
| | | 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() |
| | | |