首页 编程与开发 ArcPy ArcPy 批量投影转换:用 Python 统一文件夹内 Shapefile 坐标系

ArcPy 批量投影转换:用 Python 统一文件夹内 Shapefile 坐标系

作者: GIS研习社 更新时间:2026-05-30 13:49:22 分类:ArcPy

项目交付时,经常会收到来自不同部门的 Shapefile:有的是 WGS84,有的是 CGCS2000,有的甚至没有 prj 文件。手动一个个投影转换既慢又容易漏。ArcPy 可以把这个流程批量化,尤其适合整理数据目录和制作统一底库。

基本思路

批量投影转换的核心步骤是:遍历输入文件夹,识别每个 Shapefile,检查空间参考,调用 arcpy.management.Project 输出到目标目录。执行前建议创建独立输出文件夹,避免覆盖原始数据。

import arcpy
import os

in_dir = r"D:gisinput_shp"
out_dir = r"D:gisprojected_shp"
target_sr = arcpy.SpatialReference(4490)  # CGCS2000

os.makedirs(out_dir, exist_ok=True)
arcpy.env.workspace = in_dir
arcpy.env.overwriteOutput = True

for shp in arcpy.ListFeatureClasses("*.shp"):
    desc = arcpy.Describe(shp)
    if desc.spatialReference.name == "Unknown":
        print(f"跳过未知坐标系:{shp}")
        continue

    name = os.path.splitext(shp)[0]
    out_path = os.path.join(out_dir, f"{name}_cgcs2000.shp")
    arcpy.management.Project(shp, out_path, target_sr)
    print(f"完成:{out_path}")

未知坐标系不要硬转

如果输入数据没有正确空间参考,不能直接 Project。应先根据数据来源、坐标数值和说明文档确认原始坐标系,再使用 Define Projection 定义。定义错了再转换,只会得到更“正式”的错误数据。

关于地理变换

当源坐标系和目标坐标系基准不同时,可能需要指定 geographic transformation。ArcGIS Pro 的投影工具会提示可用转换方法,ArcPy 中也可以传入对应参数。涉及测绘精度要求时,不要忽略这一步。

批处理建议

脚本最好输出日志,记录跳过了哪些未知坐标系文件、哪些转换失败。批量数据整理最怕“悄悄失败”,日志能让后续检查有据可查。

相关文章