在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") 
相关推荐
GIS阵地1 天前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
雷动软件工作室2 天前
5.3 地图工具Map Tool使用
pyqgis
yuanjj884 天前
域格移芯平台模块之open二次开发(一):环境搭建
物联网·二次开发·移芯
Hi202402177 天前
QGIS 3.44.12 启动加速 — 修改总结
qgis
GIS阵地8 天前
QgsRasterDataProvider 完整详解(QGIS 3.40.13 C++)
开发语言·c++·qt·开源软件·qgis
疯狂学习GIS8 天前
AI Agent 操作 QGIS 实测:Codex 与 Claude Code 能自己出图吗
人工智能·ai·大模型·gis·agent·qgis·codex
梦想的初衷~8 天前
新一代分布式水文模型SWAT+:更灵活的对象化结构如何重塑流域水循环模拟?
qgis·水文水资源·swat+模型·面源污染模拟·流域水文模型·bmps
CHPCWWHSU1 个月前
qgis-samgeo
ai·qgis·sam3
爱上纯净的蓝天1 个月前
AtomCode 源码编译与二次开发入门
开源·二次开发·源码编译·atomcode
AAIshangyanxiu2 个月前
R+VIC 模型融合实践技术应用及未来气候变化模型预测
r语言·qgis·气候变化·遥感水文·分布式水文模型·vic水文模型