在实际工作中,我们经常需要将大量矢量文件统一转换到某个投影坐标系下(例如从 WGS84 转换为 UTM 投影)。QGIS 提供了多种批量处理方式,本文利用 QGIS 内置的 Python 控制台,结合 gdal:convertformat 工具进行脚本化操作,将指定目录下的所有 .shp 文件批量重投影,并输出到另一个文件夹。
核心脚本
以下脚本会将 D:\testdata\input 目录下的所有 Shapefile 重投影到 EPSG:32648,并保存到 D:\testdata\output 目录。
import os
import processing
input_dir = r"D:\testdata\input"
output_dir = r"D:\testdata\output"
os.makedirs(output_dir, exist_ok=True)
for file in os.listdir(input_dir):
if file.endswith(".shp"):
input_path = os.path.join(input_dir, file)
output_path = os.path.join(output_dir, file)
processing.run("gdal:convertformat", {
'INPUT': input_path,
'OPTIONS': '-t_srs EPSG:32648', # 目的 CRS
'OUTPUT': output_path
})
关键点解析
工具选择:gdal:convertformat 工具本质是调用 ogr2ogr,支持同时进行格式转换和坐标系重投影。
OPTIONS 参数:-t_srs EPSG:32648 指定目标坐标系。可以根据需要替换为其他 EPSG 代码(如 EPSG:3857、EPSG:4326 等)。
自动覆盖:如果想覆盖已有输出文件,可以在 OPTIONS 中添加 -overwrite,如 '-t_srs EPSG:32648 -overwrite'。
批量遍历:脚本遍历输入目录下所有以 .shp 结尾的文件,为每个文件构造完整的输入/输出路径,并调用处理工具。
注意事项
- 确保输入 Shapefile 的原始坐标系已正确设置。若未设置,可先用 指定投影(native:assignprojection)工具修正。
- 输出目录必须具有写入权限,必要时可调用 os.makedirs(output_dir, exist_ok=True) 自动创建。
- 如果批量处理大量文件,建议先用一两个文件测试,确认目标投影和参数无误再大规模执行。
- GDAL 的 OPTIONS 字符串需遵循 ogr2ogr 的 创建选项规范,例如
-lco ENCODING=UTF-8 用于设定编码。更多ogr2ogr参数,请参考官方文档。
更多批量处理问题,欢迎留言或联系我们。转载须注明出处。