第一部分:为什么使用 Python 与 ArcGIS?
在开始之前,我们先明确一下为什么 Python 是 ArcGIS 自动化的首选工具:

- 自动化重复性任务:将手动执行的、耗时的 GIS 操作(如数据格式转换、批量处理、地图制图)编写成脚本,一键完成,解放双手。
- 复杂分析与建模:Python 拥有强大的科学计算库(如 NumPy, Pandas, SciPy),可以进行比 ArcGIS 内置工具更复杂、更灵活的地理空间分析。
- 定制化与扩展:ArcGIS 提供了丰富的 API(ArcPy),让你可以深入控制 ArcGIS 的每一个组件,创建定制化的工具和工作流。
- 集成能力:Python 可以轻松与其他系统、数据库、Web 服务和应用程序集成,构建完整的地理信息解决方案。
- 社区与生态:拥有庞大的开发者社区和海量的第三方库,遇到问题容易找到解决方案,并且可以利用这些库增强你的 GIS 分析能力。
第二部分:核心工具:ArcPy 库
ArcPy 是 Esri 提供的 Python 站点包,它是连接 Python 与 ArcGIS 的桥梁,它封装了 ArcGIS Desktop(ArcMap, ArcGIS Pro)和 ArcGIS Server 的大部分地理处理工具和功能。
1 ArcPy 的主要功能模块
arcpy.env: 环境设置,这是最常用的模块之一,用于设置和获取脚本运行的环境参数,如工作空间、输出坐标系、覆盖输出等。arcpy.analysis: 分析工具,包含缓冲区、叠加、空间连接等常用的分析工具。arcpy.management: 数据管理工具,用于创建、修改、删除地理数据库要素类、表、栅格等数据。arcpy.cartography: 制图工具,用于地图布局、符号化、标注等制图相关操作。arcpy.da: 数据访问模块,提供更高效、更现代的方式来访问和操作地理数据库中的数据,尤其是在处理大型数据集时。arcpy.mapping: 地图文档操作(ArcMap 为主),用于操作.mxd地图文档,如添加图层、修改图层属性、导出地图等。(注意:在 ArcGIS Pro 中,推荐使用arcpy.mp模块)。arcpy.mp: ArcGIS Pro 地图文档操作,是arcpy.mapping的 Pro 版本,功能更强大。
第三部分:ArcPy 脚本编程基础
1 开发环境准备
- 安装 ArcGIS Desktop 或 ArcGIS Pro:Python 编程依赖于 ArcGIS 的安装,因为 ArcPy 库是随 ArcGIS 一起安装的。
- 选择 Python IDE:
- IDLE:Python 自带的简单编辑器,适合初学者。
- PyCharm:功能强大的专业 IDE,提供代码补全、调试、版本控制等高级功能,强烈推荐。
- Visual Studio Code:轻量级但功能丰富的编辑器,通过插件可以很好地支持 Python 开发。
- ArcGIS Pro 内置的 Python 窗口:非常适合进行交互式测试和学习,可以即时看到代码执行结果。
2 一个简单的脚本示例:缓冲区分析
假设我们有一个城市点要素类,我们想为每个点创建一个 1 公里的缓冲区。
步骤 1:准备数据 假设你的数据路径如下:
- 输入点数据:
C:\Data\CityPoints.shp - 输出文件夹:
C\Data\Output\ - 输出缓冲区数据:
C:\Data\Output\CityBuffers.shp
步骤 2:编写脚本

# -*- coding: utf-8 -*-
# 一个简单的缓冲区分析脚本
# 1. 导入 ArcPy 库
import arcpy
# 2. 设置工作环境和参数
# 设置工作空间,所有输出数据将保存在此目录下
arcpy.env.workspace = "C:/Data/Output"
# 设置输出坐标系,确保空间参考正确(可选但推荐)
# 这里我们使用输入数据的坐标系
input_data = "C:/Data/CityPoints.shp"
arcpy.env.outputCoordinateSystem = arcpy.SpatialReference(input_data)
# 定义输入和输出变量
input_feature_class = "C:/Data/CityPoints.shp"
output_buffer = "CityBuffers.shp"
buffer_distance = "1 kilometers" # 缓冲区距离和单位
# 3. 执行地理处理工具:Buffer
try:
# 执行 Buffer 工具
# arcpy.analysis.Buffer(in_features, out_feature_class, buffer_distance, ...)
arcpy.analysis.Buffer(input_feature_class, output_buffer, buffer_distance)
# 打印成功信息
print("缓冲区分析成功完成!")
print("输出文件路径: " + arcpy.workspace + os.sep + output_buffer)
except arcpy.ExecuteError:
# 如果工具执行失败,打印错误信息
print(arcpy.GetMessages(2)) # 2 表示显示所有错误和警告
代码解析:
import arcpy: 导入核心库。arcpy.env.workspace: 设置一个默认的文件夹,所有后续的输出文件(如果只提供文件名)都会保存在这里。arcpy.env.outputCoordinateSystem: 强制所有输出的数据具有指定的坐标系,这是保证数据一致性的好习惯。arcpy.analysis.Buffer(...): 调用 ArcGIS 的“缓冲区”工具,其参数与 ArcToolbox 中的工具参数顺序和含义完全一致。try...except: 错误处理机制。Buffer工具因为任何原因失败(如数据不存在、路径错误、单位不合法),程序不会崩溃,而是会捕获错误并打印友好的提示信息。
第四部分:进阶主题
1 使用游标遍历和修改数据
游标是逐行访问和修改要素类或表格数据的最有效方式。arcpy.da 模块提供了 UpdateCursor 和 InsertCursor。
示例:修改要素类的属性
import arcpy
# 设置工作空间和输入要素类
arcpy.env.workspace = "C:/Data/Output"
input_fc = "CityBuffers.shp"
# 使用 UpdateCursor 修改数据
# 字段列表:第一个 'SHAPE@' 是几何对象,第二个 'Area_sqkm' 是我们要计算的字段
fields = ["SHAPE@", "Area_sqkm"]
try:
with arcpy.da.UpdateCursor(input_fc, fields) as cursor:
for row in cursor:
# row 是一个列表,row[0] 是第一个字段(SHAPE@),row[1] 是第二个字段
polygon = row[0]
# 计算多边形面积(单位为平方米)
area_sqm = polygon.area
# 将平方米转换为平方公里
area_sqkm = area_sqm / 1000000
# 更新字段值
row[1] = area_sqkm
# 将修改后的行写回要素类
cursor.updateRow(row)
print("面积计算并更新成功!")
except Exception as e:
print("发生错误: " + e.args[0])
游标类型说明:

arcpy.da.SearchCursor: 只读游标,用于查询数据。arcpy.da.UpdateCursor: 可读写游标,用于修改现有数据。arcpy.da.InsertCursor: 写入游标,用于向要素类或表中插入新行。
2 创建自定义工具和工具箱
将你的 Python 脚本打包成一个可在 ArcGIS 中重复使用的工具,是发挥自动化威力的关键。
步骤:
- 编写一个完整的脚本:确保你的脚本有清晰的输入、处理和输出逻辑,并且有完善的错误处理。
- 创建工具箱:在 ArcGIS Pro 或 ArcMap 中,右键点击文件夹 -> 新建 -> 工具箱。
- 添加脚本工具:右键点击新创建的工具箱 -> 添加 -> 脚本。
- 配置脚本工具:
- 名称和标签:给工具起一个好记的名字和显示标签。
- 源脚本:选择你写好的
.py文件。 - 参数:这是最关键的一步,为你的脚本定义输入和输出参数,你可以设置参数的类型(如“数据集”、“文件”、“字符串”)、是否必需、默认值等,ArcPy 会自动将这些参数传递给你的脚本。
- 使用工具:配置完成后,你的脚本工具就会出现在工具箱中,可以像其他内置工具一样被拖拽到模型构建器或模型构建器中被调用,甚至可以在其他 Python 脚本中被调用。
第五部分:ArcGIS Pro 与 ArcMap 的差异
- Python 版本:ArcGIS Pro 默认使用 Python 3,而 ArcMap 使用 Python 2,这是最根本的区别,编写脚本时需要注意语法差异(如
print函数)。 - 地图文档模块:
- ArcMap 使用
arcpy.mapping来操作.mxd文件。 - ArcGIS Pro 使用
arcpy.mp来操作.aprx文件。arcpy.mp的设计更现代化,面向对象。
- ArcMap 使用
- 推荐实践:新项目应优先使用 ArcGIS Pro,因为它代表了未来的方向,并且性能和功能都更优。
第六部分:学习资源与最佳实践
1 推荐资源
- Esri 官方文档:这是最权威、最全面的资源。
- ArcPy 帮助文档
- ArcGIS API for Python (用于连接 ArcGIS Online/Enterprise,与 ArcPy 不同但同样重要)
- Esri 官方教程:提供从入门到进阶的各类教程。
- Stack Exchange (GIS):一个高质量的问答社区,可以搜索和提问具体的技术问题。
- GitHub:搜索
arcpy,可以找到大量开源的脚本和工具库,学习他人的优秀代码。
2 最佳实践
- 使用相对路径:在脚本中,尽量使用相对于脚本所在位置的路径,而不是硬编码的绝对路径(如
C:/Data/...),这样脚本更容易在不同机器上共享和运行。 - 模块化编程:将复杂的脚本拆分成多个小的、功能单一的函数或模块,提高代码的可读性和复用性。
- 添加注释和文档:为你的代码添加清晰的注释,解释每一部分的功能,使用
"""Docstrings"""来描述函数的用途、参数和返回值。 - 版本控制:使用 Git 等版本控制工具管理你的代码,方便追踪修改、协作和回滚。
- 性能优化:
- 优先使用
arcpy.da游标,而不是旧的arcpy游标。 - 在循环中避免频繁调用地理处理工具,尽量将操作向量化(一次性处理整个数据集,而不是逐个要素处理)。
- 在脚本开始时设置好
arcpy.env.overwriteOutput = True,避免因输出文件已存在而导致的错误。
- 优先使用
希望这份指南能帮助你顺利入门 ArcGIS Python 脚本编程!这是一个充满乐趣和挑战的领域,掌握它将极大地提升你的 GIS 工作效率和能力,祝你编程愉快!
