在ArcGIS Pro中用Python处理工作,是我们在ArcGIS Pro处理工作中的一种高级玩法。而ArcPy则是Esri公司为ArcGIS平台开发的Python站点包(site-package),为广大用户提供了一种高效且灵活的任务处理方式,可以用Python脚本自动化执行我们所需的几乎所有操作。
全称:ArcGIS Python 站点包
首次发布:2010 年随 ArcGIS 10.0 推出,替代早期的 arcgisscripting 模块
当前版本:绑定 Python 3.x(ArcGIS Pro);ArcMap 时代绑定 Python 2.7(已停止维护)
核心定位:将 ArcGIS 强大的空间分析与数据管理功能,封装为 Python 可调用的函数和类
在传统工作中,处理大批量数据的时候往往需要手工一步步使用各个工具,逐个环节去执行。但是学了ArcPy之后,我们就能通过写一个Python脚本,批量处理成百上千个数据文件,再也不需要一个图层手动执行一次操作了。
想当年,小文熬过不少夜,用同样的操作去处理项目中的数据,每次执行都要设置七八个参数,做到最后自个儿都麻木了。学了ArcPy,把脚本保存为 *.py 文件,一次编写就能多次运行,不需要一次次去设置那么多参数。
ArcPy可以与NumPy、Pandas、Maplotlib等科学计算生态无缝衔接,不需要同时打开多个软件,一会儿用这个窗口一会儿用那个窗口干活。
能够自定义地理处理工具,封装复杂的分析流程。打破平时我们使用地理工具时,有时候工具可能离我们需要的结果偏差一点点的情况。
支持计划任务(Task Scheduler)定时执行。
小文这里安装的ArcGIS Pro版本是 3.6.0 ,如果实际操作与小文的不一致,可能就是版本不一致的原因导致的。但大方向是没问题的,大家可以根据自己实际的版本去收集相关信息。
在如下图所示位置,打开我们最常用的Python窗口,位于【分析】选项卡下的左侧【Python】,下拉选择【Python窗口 】,可以打开我们需要的界面。
要注意的是,并不是整个窗口都能输入代码,窗口上层是运行结果显示界面,下面小文标注绿色框的位置才是我们需要的代码输入框(有点像AutoCAD的命令窗口)。这个划分跟老版本的Python窗口不大一样,老版本转Pro的童鞋注意一下。
代码输入后,按两次回车键可执行代码。
安装ArcGIS Pro之后,Python其实已经默认安装到里面了,而且,小文安装的Pro 3.6.0版本,附带的是 Python 3.13.7。我们可以通过两个代码来查询我们ArcGIS Pro的安装信息(版本、安装位置、安装时间等)和Python的版本信息。
查询ArcGIS安装信息脚本:
import arcpyprint(arcpy.GetInstallInfo())
查询Python版本脚本:
import sysprint(sys.version)
上述两个脚本运行之后输出如下:
每个人各自运行的结果一般都是不一样的,不用寻求做的跟小文的一模一样。
跟老版本不一样,Pro中还内置了一个Jupyter Notebook的窗口,能够联动matplotlib图表内联渲染等操作。适合在做教程或者做分析报告的时候使用,因为Jupyter Notebook写的脚本可以直接保存为 .ipynb 文件分享,可以加说明文字和出分析图等。
不过,一般做数据处理的话,建议还是用Python窗口,后续也会给大家做几期Jupyter Notebook的操作。这里就先带过了。
Python 窗口 vs Jupyter Notebook 对比
ArcPy采用了模块化的设计,核心模块就是arcpy,按功能又细分为了多个子模块。
模块总览:
arcpy├── arcpy.mp → 地图文档与制图自动化├── arcpy.da → 数据访问(游标、字段操作)├── arcpy.sa → 空间分析(栅格计算、表面分析)├── arcpy.na → 网络分析(路径、服务区、位置分配)├── arcpy.management → 数据管理工具集├── arcpy.analysis → 叠加分析、邻域分析、提取分析├── arcpy.ia → 影像分析(ArcGIS Image Analyst 扩展)├── arcpy.editing → 高级编辑操作└── arcpy.geoprocessing → 地理处理服务与工具箱管理
这个是负责地图文档(.aprx)的自动化操作,可以打开、保存、导出地图文档,能管理图层、布局、图例、比例尺和打印布局自动化等。我们常说的批量出图,一般就是用这个模块配合地图系列来实现的,可以批量把图件导出为pdf、png、jpeg等格式。
比如批量生成不同区域的专题地图代码如下:
import arcpyaprx = arcpy.mp.ArcGISProject("CURRENT")layout = aprx.listLayouts()[0]layout.exportToPDF(r"E:\\output\\map.pdf")
arcpy.da — 数据访问(Data Access)
这个模块提供了高性能的数据读写接口,可以读取查询数据(SearchCursor)、插入新记录(InsertCursor)、更新记录和删除现有记录(UpdateCursor),还能够在Numpy数组与要素类之间相互转换(NumPyArrayToFeatureClass)。
相比于传统的ArcPy游标,arcpy.da游标的速度提高了5-10倍!
示例代码:
import arcpywith arcpy.da.SearchCursor("cities", ["NAME", "POPULATION"]) as cursor:for row in cursor: print(f"{row[0]}: {row[1]}")
arcpy.sa — 空间分析(Spatial Analyst)
这个模块需要启用Spatial Analyst扩展许可才能使用,可以使用Spatial Analyst的所有栅格数据分析功能。如表面分析、栅格计算、水文分析、插值分析和距离分析等能力。
示例代码:
import arcpy.sa as saslope = sa.Slope("dem.tif", "DEGREE")slope.save("slope.tif")
arcpy.na — 网络分析(Network Analyst)
需要启用Network Analyst 扩展许可,可以执行最短路径、服务器分析、最近设施点、位置分配、起源-目的地成本矩阵等网络分析。
示例代码:
import arcpy.na as na# 创建网络分析图层并进行路径求解
此模块提供地理数据库与图层的基础管理操作,可以复制要素到新位置(CopyFeatures)、坐标系的投影变换(Project)、创建空要素类(CreateFeatureclass)、批量追加数据(Append)和数据融合与聚合(Merge/Dissolve)等。数据管理是自动化GIS数据预处理的第一站,覆盖了90%以上的日常数据整理需求。
示例代码:
import arcpy# 复制并投影到 CGCS2000arcpy.management.CopyFeatures("cities", "cities_copy")arcpy.management.Project("cities_copy", "cities_cgcs2000", 'CGCS2000_3_Degree_GK_Zone_38')
arcpy.analysis — 空间分析(Analysis)
提供矢量数据的核心空间运算,如我们常用的缓冲区分析(Buffer)、裁剪提取(Clip)、叠加分析(Intersect/Union)、按属性选择(SelectLayerByAttribute)和邻近度分析(Near/GenerateNearTable)等等。以上所有的分析工具输出的结果均为新的要素,原始数据不会改动,支持链式GP工作流。
示例代码:
import arcpy# 对城市做 5km 缓冲区,再与行政区求交集arcpy.analysis.Buffer("cities", "city_buffer", "5 Kilometers")arcpy.analysis.Intersect(["city_buffer", "districts"], "city_district_overlap")
arcpy.ia — 影像分析(Image Analyst)
提供遥感影像与深度学习分析能力,需要启用Image Analyst 扩展许可,可以进行像素级影像分类(ClassifyPixelsUsingDeepLearning)、目标检测(DetectObjectsUsingDeepLearning)、影像分割(Segment)、波段提取(ExtractBand)、植被指数计算(NDVI)和水体指数计算(NDWI)等。支持GPU加速,深度学习推理速度比传统方法提升5-10倍。
示例代码:
import arcpy# 使用 Deep Learning 检测建筑物arcpy.ia.DetectObjectsUsingDeepLearning( in_raster="orthophoto.tif", out_detected_objects="buildings.shp", in_model_definition="building_detection.dlpk")
arcpy.editing — 编辑会话(Editing Sessions)
提供了地理数据库的事务级编辑的能力,可以开启编辑会话(Editor.startEditing())、开始编辑操作(Editor.startOperation())、批量更新及删除记录(UpdateCursor)、调用几何修复工具(Snap/ExtendLine)等操作,支持回滚操作。
示例代码:
import arcpy# 在 GDB 中安全更新属性edit = arcpy.da.Editor("C:/data.gdb")edit.startEditing(False, False)edit.startOperation()with arcpy.da.UpdateCursor("cities", ["NAME", "POPULATION"]) as cursor:for row in cursor: row[1] = int(row[1] * 1.05) cursor.updateRow(row)edit.stopOperation()edit.stopEditing(True)
arcpy.geoprocessing — 地理处理框架
提供工具发现、环境控制与执行监控,如枚举可用工具(ListTools)、获取数据属性和元数据(Describe)、检查数据是否存在(Exists)、环境设置(env)和日志与消息管理(AddMessage)等操作。通过脚本控制GP环境,可以实现跨工程、跨工具的自动化编排。
示例代码:
import arcpy# 设置 GP 环境arcpy.env.workspace = "C:/data.gdb"arcpy.env.overwriteOutput = True# 工具发现与数据检查tools = arcpy.ListTools("*Buffer*")print(f"找到 {len(tools)} 个 Buffer 相关工具")if arcpy.Exists("cities"): arcpy.AddMessage("数据就绪,开始处理...")
需要注意的是:
ArcMap(10.x)使用 Python 2.7 和旧版 arcpy,与 Pro 的 arcpy 不兼容
Python 2.7 已于 2020 年停止维护,新开发应全部迁移到 ArcGIS Pro
脚本中的版本检查:arcpy.GetInstallInfo()['Version']
多说无益,最好的学习还是实操。大家参考我下面的代码,可以自行用自己的数据来执行一下操作试试。这里小文以创建缓冲区的arcpy脚本为例:
# -*- coding: utf-8 -*-"""第一个ArcPy脚本:创建要素缓冲区作者: NeverLandv日期: 2026-08-19"""import arcpy# === 步骤1: 导入模块并设置环境 ===# 设置工作空间(存放输入/输出数据的目录)arcpy.env.workspace = r"E:\\GIS_Data\\project"# 设置输出覆盖(开发调试阶段可开启)arcpy.env.overwriteOutput = True# === 步骤2: 验证数据存在 ===input_fc = "cities.shp"ifnot arcpy.Exists(input_fc): raise FileNotFoundError(f"输入数据不存在: {input_fc}")# === 步骤3: 调用地理处理工具 ===# 使用 arcpy.analysis 子模块中的 Buffer 工具output_fc = "cities_buffer.shp"arcpy.analysis.Buffer( in_features=input_fc, out_feature_class=output_fc, buffer_distance_or_field="1000 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE")# === 步骤4: 输出结果信息 ===count = arcpy.management.GetCount(output_fc)print(f"缓冲区创建成功!")print(f"输出路径: {arcpy.env.workspace}\\{output_fc}")print(f"生成要素数量: {count}")print(f"ArcPy版本: {arcpy.GetInstallInfo()['Version']}")
无论是什么内容的学习,实操是最快掌握相关技能的方法。特别是arcpy,同样的代码在不同电脑、不同数据基础的情况下运行,可能会有不一样的结果,需要进行部分参数或代码的微调、嵌套才能使用。小文之前就遇到过,明明以前能用的代码,换到新电脑之后在不同项目数据的情况下,根本跑不出来结果,查了半天、询问老师才最后解决问题,大家一定要注意。
小文今天的分享就到这里了,希望这篇文章对大家入门arcpy有所帮助。喜欢的各位小伙伴记得给小文点点免费的赞和关注哈!
下期预告:
GIS+AI给中华白海豚当"保镖":厦门怎么做到的