pyqgis 您所在的位置:网站首页 gdb文件怎么导入arcgis pyqgis

pyqgis

2023-06-09 23:44| 来源: 网络整理| 查看: 265

第一次尝试使用qgis的python批量处理数据。

场景需求:业主给了一些农村污水管网数据,每个村一个.gdb文件,里面包含两个图层:管线数据(命名规则中包含PS_WSG_LINE)和管井数据(命名规则中包含PS_WSG_POINT)。

处理步骤如下:

1、插件-Python控制台,或者直接从工具栏上面找

 2、

 大体思路:循环遍历,如果是gdb文件则找到里面的具体图层,设置正确坐标系,导出geojson格式到新文件夹,导出的同时转换坐标系,具体代码如下:

inputCRS = QgsCoordinateReferenceSystem(4549) # 根据经验判断原始坐标系 outputCRS = QgsCoordinateReferenceSystem(4326) # 输出时的坐标系 #inputFolder = 'D:\\GIS数据库' inputFolder = 'D:\\GIS数据库\\镇11个' outputFolder = "C:\\Users\\Desktop\\新建文件夹\\" # 处理文件夹 def dealGDBFolder(path): for item in os.listdir(path): #print(item) file_name, file_extension = os.path.splitext(item) # 如果是文件夹则递归执行 if(file_extension==''): dealGDBFolder(os.path.join(path, item)) # 如果扩展名为gdb则执行下面的函数 elif(file_extension == '.gdb' or file_extension == '.GDB'): file_full_name = os.path.join(path, item) dealGDBFile(file_full_name, file_name) # 处理gdb def dealGDBFile(file_full_name, file_name): # 加载gdb gdbLayer = QgsVectorLayer(file_full_name, file_name) # 获取里面的子图层 subLayers = gdbLayer.dataProvider().subLayers() for subLayer in subLayers: parts = subLayer.split('!!::!!') print(file_name+";"+parts[1]+";"+parts[2]) layerName = parts[1] lpath = r"{}|layername={}".format(file_full_name,layerName) # 原始矢量图层没有坐标系则添加正确的坐标系 olayer = QgsVectorLayer(lpath, file_name+" "+layerName, "ogr") olayer.setCrs(inputCRS) # 另存为geojson文件,并转换坐标系 QgsVectorFileWriter.writeAsVectorFormat(olayer, outputFolder+file_name+" "+layerName+".geojson", "utf-8", outputCRS,'GeoJson', 0) # 加载到当前视图 #QgsProject.instance().addMapLayer(olayer) dealGDBFolder(inputFolder) print("处理完成")

每个图层导出到新文件夹中,然后进行后续处理。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有