在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") 
相关推荐
做萤石二次开发的哈哈3 天前
海康测温球机接入实战:测温阈值、船只检测、烟火预警事件的ISAPI对接方案
物联网·二次开发·热成像·蓝海aiot一站式工作台·aiot开发·萤石云开放平台·测温球机
做萤石二次开发的哈哈5 天前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
做萤石二次开发的哈哈7 天前
海康甲烷监测终端二次开发:四级能力门控、规则联动与两类异常事件的全链路拆解
物联网·二次开发·工业安全·蓝海aiot一站式工作台·aiot开发·危险气体监测·甲烷检测
xiangcns11 天前
PDMS PiplineTool(三十)一堆小优化+一个彩蛋功能
.net·二次开发·pdms
GISHUB1 个月前
基于QGIS 3.44开发Python插件完整教程
python·qgis
charlee441 个月前
《GIS基础原理与技术实践》配套教学课件
gis·开源项目·地理信息系统·教学课件·gis基础原理与技术实践
GIS阵地2 个月前
ERA5‑Land逐小时降水数据下载+QGIS后台QgsTask批量处理完整指南(水文洪涝仿真,河南省案例)
gis·qgis·数据处理
久数君2 个月前
2026年GIS入门软件怎么选?ArcGIS、QGIS、GISBox等工具详解
gis·qgis·arcgis pro·超图·gisbox·global mapper·地图数据处理工具
小僧景贤2 个月前
从零实战!ESP32-S3 搭建AI交互机器人终端(小智AI平台完整版教程)
人工智能·机器人·二次开发·零基础实战
进哥AI研习社2 个月前
AtomCode 源码编译与二次开发入门:从 Clone 仓库到自定义 Agent 工具的完整指南
rust·二次开发·源码编译·atomcode·agent 工具·tool 扩展·ai 编码智能体