在 QGIS 中,按照矢量图层中的每个唯一字段值导出为独立的 GeoJSON 文件(或独立图层),最高效的方法是使用 分割矢量图层 (Split vector layer) 处理算法。
方法一:使用“分割矢量图层”工具
打开工具箱: 在 QGIS 主菜单中,点击 处理 (Processing) > 工具箱 (Toolbox)(或按快捷键 Ctrl+Alt+T)。
搜索算法: 在工具箱顶部的搜索栏中输入 split。 找到并双击运行以下算法:
算法名称: 分割矢量图层 (Split vector layer)
配置参数: 在弹出的对话框中设置以下参数:
输入图层 (Input layer):待读取的图层
唯一ID字段 (Unique ID field): 选择你想要用来区分文件的字段
输出目录 (Output directory): 点击 ... 按钮,选择一个文件夹来保存生成的文件

注意:该工具会直接生成文件
方法二:Python 脚本
如果你希望在处理后直接将它们作为独立图层加载到 QGIS 项目面板中,可以使用如下 Python 控制台脚本。
修改变量:
source_layer_name: 待处理图层名称
split_field: 区分的字段名称
output_folder: 输出目录
PyQGIS代码:
import os
from qgis.core import QgsProject, QgsVectorLayer
# 配置路径和字段
source_layer_name = 'my_new_layer'
split_field = 'NAME'
output_folder = r'D:\output\geojson\split_output'
# 获取源图层
source_layer = QgsProject.instance().mapLayersByName(source_layer_name)[0]
if not source_layer.isValid():
print(f"错误:未找到图层 {source_layer_name}")
else:
# 确保输出文件夹存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 获取唯一的 NAME 值
unique_values = source_layer.uniqueValues(source_layer.fields().indexOf(split_field))
print(f"开始拆分,共发现 {len(unique_values)} 个唯一名称...")
for value in unique_values:
if value is None:
continue
# 构建表达式过滤当前名称
# 处理字符串值需要加引号,防止特殊字符
expression = f"\"{split_field}\" = '{value}'"
# 创建临时图层副本并应用过滤
# 使用 processing 算法进行提取更符合 QGIS 规范,这里直接用内存层演示逻辑
# 为了稳健性,我们调用 native:extractbyexpression
import processing
output_file_path = os.path.join(output_folder, f"{value}.geojson")
# 清理文件名中非法字符 (如 / \ : * ? " < > |)
safe_value = "".join([c for c in str(value) if c not in r'\/:*?"<>|'])
output_file_path = os.path.join(output_folder, f"{safe_value}.geojson")
params = {
'INPUT': source_layer,
'EXPRESSION': expression,
'OUTPUT': output_file_path
}
try:
processing.run("native:extractbyexpression", params)
# 可选:将生成的图层加载到项目中
new_layer = QgsVectorLayer(output_file_path, str(value), "ogr")
if new_layer.isValid():
QgsProject.instance().addMapLayer(new_layer)
else:
print(f"无法加载图层:{value}")
except Exception as e:
print(f"处理 {value} 时出错:{e}")
print("所有图层导出完成。")
更多QGIS使用问题欢迎留言或联系我们,转载须注明出处。