pyqgis

3 篇文章 0 订阅

第一次尝试使用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("处理完成")

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值