pyqgis

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

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

### 关于 PyQGIS 的学习资源 PyQGISQGIS 提供的一个强大的 Python 接口,允许开发者通过脚本操作地理数据和地图功能。以下是关于 PyQGIS 的一些学习资源、教程以及示例代码。 #### 官方文档与指南 官方文档是最权威的学习材料之一,涵盖了从基础到高级的各种主题。可以访问 QGIS 官网获取最新的 PyQGIS 文档[^1]。 - **链接**: https://docs.qgis.org/latest/en/docs/pyqgis_developer_cookbook/index.html 该手册提供了详细的说明,包括如何加载图层、执行空间分析、创建自定义插件等内容。 --- #### 示例代码展示 以下是一些常见的 PyQGIS 操作及其对应的代码片段: ##### 加载矢量图层并查询属性表 ```python from qgis.core import QgsVectorLayer, QgsProject # 创建矢量图层对象 layer_path = "/path/to/your/shapefile.shp" vlayer = QgsVectorLayer(layer_path, "layer_name", "ogr") if not vlayer.isValid(): print("Layer failed to load!") else: # 将图层添加至项目中 QgsProject.instance().addMapLayer(vlayer) # 遍历要素并打印字段值 for feature in vlayer.getFeatures(): print(feature.attributes()) ``` 此代码展示了如何加载一个 Shapefile 文件作为矢量图层,并遍历其特征记录。 --- ##### 执行缓冲区分析 ```python from qgis.analysis import QgsGeometryAnalyzer input_layer = iface.activeLayer() # 获取当前活动图层 output_file = "/path/to/output_buffer.shp" # 设置缓冲距离 (单位取决于坐标系) distance = 1000 # 缓冲半径为 1000 米 segments = 5 # 圆弧分段数 dissolve = False # 是否溶解缓冲区域 # 调用缓冲方法 QgsGeometryAnalyzer().buffer(input_layer, output_file, distance, dissolve, segments) print(f"Buffer created at {output_file}") ``` 上述代码实现了基于输入矢量图层的缓冲区计算,并保存结果到指定路径。 --- #### 社区贡献的学习笔记 除了官方文档外,还有许多社区成员分享了自己的经验总结和技术博客: - GeoPandas 和 PyQGIS 结合使用的案例研究。 - 自动化批量处理栅格影像的方法。 - 开发定制化的 QGIS 插件流程解析。 可以通过搜索引擎查找关键词如 “PyQGIS tutorial” 或者浏览 GitHub 上开源项目的仓库来获得更多灵感。 --- #### 工具书推荐 对于希望深入掌握这门技术的人来说,《Mastering QGIS》一书中专门有一章节讨论了有关编程接口的内容;另外《Python Geospatial Development Essentials》也提到了利用 PyQGIS 进行开发的实际技巧。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值