在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") 
相关推荐
玩泥巴的2 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
十启树2 天前
QGis开发环境部署
开发语言·gis·qgis
GIS阵地8 天前
如何统计QGIS里栅格图层的面积呢
c++·qgis·开源gis·pyqgis
牛老师讲GIS9 天前
QGIS操作教程 | 一站式从入门到精通的QGIS学习指南
qgis·qgis操作教程
Bigemap软件18 天前
【GIS实操指南】测量长度与面积的实用技巧
测试工具·地理信息系统·bigemappro·bigemap教程
那年那棵树18 天前
【WebGis】基于WebGis的系统设计与开发
gis·openlayers·cesium·地理信息系统
枝上棉蛮22 天前
GISBox vs QGIS:轻量化工具与开源平台的全方位选型指南
gis·免费·qgis·轻量化·gisbox·gis服务器
枝上棉蛮24 天前
2026年GIS软件精选:五款工具的专业性与实用性解析
arcgis·gis·qgis·超图·gisbox·地图数据处理·gis工具
神工坊24 天前
案例分享︱仿真软件并行架构升级——基于swOpenFOAM的智慧风场平台
二次开发·hpc·cfd·cae·流体力学·风电场仿真·加速库
淘源码d1 个月前
【开源可商用】高并发智慧校园SaaS平台核心源码:Spring Boot 微服务 + 多终端协同
java·程序员·智慧校园·源码·二次开发·软件源码·电子班牌系统