在QGIS中将多个图层导出到一个geojson里 gdb转geojson qgis强大的格式转换工具

如何将gdb数据转换为Geojson,其实可以利用QGIS,理论上来讲,凡是QGIS支持导入导出的数据,都可以进行转换。原因是QGIS可以先将加载他所支持的格式,加载完之后就变成了QGIS自己的格式,然后就能导出,导出为它可以支持导出的格式,相当于有一个中间格式。

当然,本文的重点是把gdb转换为一个geojson,利用python代码很方便,我这里使用的QGIS3.18,在QGIS的python控制台里进行运行

一个geojson可以有多种几何类型(点、线、面)的数据

1

首先要在QGIS里加载GDB数据

2

然后把下面的代码粘进去,设置好输出路径即可,

python 复制代码
# -*- coding: utf-8 -*-
"""
修复 QByteArray 导出错误的 GeoJSON 导出脚本 
"""
from qgis.core  import *
import json
import base64  # 关键:添加 base64 编码支持 
 
def export_layers_to_geojson(output_path):
    # 获取项目所有矢量图层
    layers = [layer for layer in QgsProject.instance().mapLayers().values()  
              if isinstance(layer, QgsVectorLayer)]
    
    # 创建 GeoJSON 结构 
    geojson = {
        "type": "FeatureCollection",
        "features": []
    }
    
    # 自定义序列化处理器 
    def process_value(value):
        """处理 QByteArray 类型数据"""
        if isinstance(value, QByteArray):
            # 转换为 Base64 字符串(JSON 兼容格式)
            return base64.b64encode(value.data()).decode('utf-8') 
        return value
    
    # 遍历所有图层要素 
    for layer in layers:
        for feature in layer.getFeatures(): 
            # 处理属性表(修复 QByteArray)
            properties = {}
            for field in feature.fields(): 
                value = feature[field.name()]
                properties[field.name()] = process_value(value)
            
            # 获取几何对象(WKT格式)
            geom = feature.geometry() 
            if not geom.isNull(): 
                # 转换为 GeoJSON 兼容几何 
                geom_json = json.loads(geom.asJson()) 
            else:
                geom_json = None 
            
            # 构建 GeoJSON 要素 
            geojson["features"].append({
                "type": "Feature",
                "geometry": geom_json,
                "properties": properties
            })
    
    # 写入文件(RFC7946 标准格式)
    with open(output_path, 'w', encoding='utf-8') as f:
        json.dump(geojson,  f, 
                  ensure_ascii=False, 
                  indent=2,
                  default=str)  # 关键:处理非常规类型 
        
    print(f"✅ 成功导出至: {output_path}")
 
# 使用示例
export_layers_to_geojson("C:/D/project/zp/八条河/output/林地/林草地.geojson") 
相关推荐
AndrewHZ11 天前
【图像处理基石】GIS图像处理入门:4个核心算法与Python实现(附完整代码)
图像处理·python·算法·计算机视觉·gis·cv·地理信息系统
GIS阵地17 天前
CSV转换为QGIS的简单分类符号
arcgis·二次开发·qgis·地理信息系统·pyqgis
Rotion_深19 天前
海康 智能相机二开 绘制底图+测试工具应用框
c#·二次开发·海康·智能相机
玩泥巴的24 天前
.NET操作Word实现智能文档处理 - 内容查找替换与书签操作
word·.net·二次开发·office·com互操作
玩泥巴的1 个月前
.NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南
word·二次开发·office·com互操作
玩泥巴的1 个月前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
word·二次开发·office·com互操作
玩泥巴的1 个月前
.NET驾驭Word之力:COM组件二次开发全攻略之连接Word与创建你的第一个自动化文档
word·二次开发·com互操作
玩泥巴的2 个月前
使用二次封装的Excel COM 组件操作Excel\WPS ET IExcelRange 高级应用
excel·二次开发·com互操作
玩泥巴的2 个月前
使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列
excel·二次开发