一、概述
1.1 软件版本信息
本文所使用的软件环境如下: ArcGIS Pro 版本:3.5.4 对应 Python 版本:3.11.111.2 什么是arcpy?
ArcPy 是 Esri 提供的一个 Python 站点包(Site Package),作为连接 Python 编程语言与 ArcGIS 地理处理功能的核心接口。 通过该工具包,用户可以实现多种高级操作: - 自动化流程:将原本需要多次手动点击的操作转化为一键执行的脚本任务。 - 空间数据分析:结合 NumPy、SciPy 等科学计算库,对地理数据进行深度分析。 - 批量出图:自动加载工程文件(.aprx),批量导出大量地图成果。 - 数据清洗与转换:高效检查、修复并转换大规模的空间数据集。 简而言之,ArcPy 就是 ArcGIS 地理处理能力在 Python 中的编程化体现。相比图形界面操作,编写脚本在处理大批量任务时效率更高。ArcGIS Pro
例如,以下这些常见功能都可以通过代码调用实现:
工具箱
此外,在 ArcGIS Pro 内部还提供了多种交互方式来完成重复性或批量任务:
- 使用 模型构建器(ModelBuilder):无需编程基础,通过拖拽方式设计流程。
- 利用 Python 窗口:直接输入命令,适合简单调试和快速测试。
- 运行 ArcGIS Notebook:类似 Jupyter 的交互式环境,便于记录和分享工作流。
- 编写 外部独立 Python 脚本:适用于复杂项目和生产级部署。
其中,使用 Notebook 的体验较为流畅,尤其适合数据分析类任务,具体选择取决于个人习惯。
模型构建器
四种工作模式对比
以下是对上述四种方法的综合比较:| 项目 | 模型构建器(ModelBuilder) | 软件内 Python(Python Window) | 软件内 Notebook(ArcGIS Notebook) | 外部独立 Python 脚本 |
|---|---|---|---|---|
| 操作方式 | 可视化拖拽 | 即时输入命令 | 类似 Jupyter Notebook | 独立脚本 |
| 适合人群 | 不写代码的用户 | 掌握基础 Python 的用户 | 用于数据分析或流程调试 | 工程开发、批处理、服务器运维 |
| 任务复杂度 | 适合固定流程 | 中等复杂度 | 中~高复杂度 | 最高,支持完全自定义逻辑 |
| 循环 / 条件判断 | 功能弱(仅支持简单迭代) | 有,但不适合复杂逻辑 | 完整 Python 控制结构 | 完全自由,灵活性最强 |
| 长期任务运行 | 不适合 | 容易卡死 | 依赖 UI,易中断 | 最适合长时间运行任务 |
| 批处理能力 | 中等(流程需预先设定) | 中等 | 中等 | 最强,支持超大规模批处理 |
| 多进程支持 | 不支持 | 不支持或易出错 | 受限且不稳定 | 支持多进程,运行更稳定 |
| 性能表现 | 最慢,界面阻塞严重 | 一般 | 受 UI 影响较大 | 最优,无界面负担 |
| 数据锁定问题 | 存在(依赖 .aprx 工程文件) | 存在 | 存在 | 无锁机制,更适合写入大量数据 |
| 可扩展性(第三方库) | 不支持 | 受限 | 受限 | 完全自由,可安装任意第三方库 |
| 适用场景 | 固定流程、可视化建模 | 小型快速任务 | 调试、可视化展示、流程记录 | 大型工程项目、长期任务、服务器部署 |
| 不推荐用途 | 大批量处理、复杂逻辑控制 | 大批量任务、长时间运行 | 超大数据集、持续运行任务 | 与 ArcGIS Pro UI 强绑定的操作 |
| 可复现性 | 中等,流程可保存 | 较差 | 高,Notebook 可重现步骤 | 最高,支持版本控制(如 Git) |
| 是否依赖 ArcGIS Pro 界面 | 必须依赖 | 必须依赖 | 必须依赖 | 完全不依赖 |
| 典型应用场景 | 矢量数据批处理流程 | 调用工具完成小任务 | 调试 arcpy 工作流 | 处理上千个栅格文件、生产环境自动化 |
.py
二、如何克隆 arcpy 环境
进入 ArcGIS Pro 的设置页面 → 包管理器,可以看到系统自带的 Python 环境信息:arcpy
该环境是由 Conda 管理的虚拟环境,通常位于软件安装目录下的 bin 文件夹中,例如:
D:\ArcGis\bin\Python\envs\arcgispro-py3
虽然在软件内部无法直接修改默认环境,但实际上可以通过命令行像管理普通 Conda 环境一样对其进行操作。
但强烈建议不要直接修改原生环境,因为安装某些非标准包可能导致依赖关系被破坏,进而影响软件稳定性。
推荐做法是:**克隆原始环境**,然后在新环境中自由安装所需包,避免对主环境造成影响。
具体步骤如下:
1. 在包管理器界面,点击当前活动环境右侧的“设置”图标;
2. 点击右侧三个点按钮,选择“克隆”选项即可开始复制。
在弹出窗口中指定新的环境名称和存储路径。例如,可将其克隆至系统的 Conda 环境目录下(注意:ArcGIS Pro 自带的 Conda 仅供其自身使用,不应与其混淆):
conda
克隆完成后,你可以在该环境中自由安装额外的 Python 包,管理方式与常规 Conda 虚拟环境一致。
例如,我在此环境中安装了两个用于处理 Excel 文件的库:
xlsxwriter 和 openpyxl
三、环境测试
接下来,在 PyCharm 中配置使用刚刚克隆的 Python 解释器:
Gemini
创建一个简单的测试脚本以验证 arcpy 是否可用:
# -*- coding = utf-8 -*- # @TIME : 2025/11/24 18:09 # @Author : Grace # @File : arcpy_test.py # @Software : PyCharm Professional 2025.1.2 # Introduction:测试克隆的arcpy环境 import sys import os后续可根据实际需求继续添加 arcpy 相关导入语句并运行功能测试。
四、注意事项
- 克隆后的环境应定期备份,尤其是已安装多个第三方库的情况下。 - 避免在克隆环境中安装与 ArcPy 冲突的库(如旧版 numpy 或 pandas)。 - 若在外部 IDE 中运行脚本,请确保脚本中正确引用了地理数据库路径、工程文件位置等资源。 - 多人协作时,建议统一使用克隆环境,并共享环境配置文件(environment.yml)。 - 批量处理任务前,先在小样本上测试脚本逻辑,防止错误扩散。
import arcpy
import openpyxl
import xlsxwriter
import sys
import os
def check_environment():
print("=" * 30)
print("1. 环境与版本检测")
print("=" * 30)
# 输出当前使用的 Python 解释器路径
print(f"当前 Python 路径: {sys.executable}")
# 判断是否在推荐的克隆环境中运行(避免使用默认 Program Files 环境)
if "Program Files" in sys.executable:
print("?? 警告: 你似乎正在使用 ArcGIS Pro 的默认安装环境,而不是克隆环境。")
else:
print("? 状态: 正确(正在使用克隆/自定义环境)。")
# 显示 Python 版本信息
print(f"Python 版本: {sys.version.split()[0]}")
# 检查 ArcPy 是否正常导入并获取 ArcGIS Pro 版本
try:
install_info = arcpy.GetInstallInfo()
print(f"ArcGIS Pro 版本: {install_info['Version']}")
print("? ArcPy 导入成功。")
except Exception as e:
print(f"? ArcPy 导入失败: {e}")
def check_arcpy_function():
print("\n" + "=" * 30)
print("2. ArcPy 功能测试")
print("=" * 30)
try:
# 创建点对象和几何体,用于验证空间处理功能是否可用
pt = arcpy.Point(100, 200)
pt_geom = arcpy.PointGeometry(pt)
print(f"测试几何创建: {pt_geom.JSON}")
print("? ArcPy 几何功能正常。")
except Exception as e:
print(f"? ArcPy 功能测试失败: {e}")
def check_excel_libs():
print("\n" + "=" * 30)
print("3. Excel 库写入测试")
print("=" * 30)
# 定义输出目录为脚本所在路径
output_dir = os.getcwd()
print(f"测试文件生成目录: {output_dir}\n")
#
# 测试 openpyxl 是否能正常创建工作簿并写入数据
try:
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "OpenPyXL测试"
ws['A1'] = "ArcGIS Pro 3.5"
ws['B1'] = "OpenPyXL 写入成功"
file_name = os.path.join(output_dir, "test_openpyxl.xlsx")
wb.save(file_name)
print(f"? openpyxl: 成功生成 '{file_name}'")
except Exception as e:
print(f"? openpyxl 失败: {e}")
#
# 测试 xlsxwriter 是否可以创建带格式的工作表
try:
file_name = os.path.join(output_dir, "test_xlsxwriter.xlsx")
workbook = xlsxwriter.Workbook(file_name)
worksheet = workbook.add_worksheet("XlsxWriter测试")
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'ArcGIS Pro 3.5', bold)
worksheet.write('B1', 'XlsxWriter 写入成功')
workbook.close()
print(f"? xlsxwriter: 成功生成 '{file_name}'")
except Exception as e:
print(f"? xlsxwriter 失败: {e}")
if __name__ == "__main__":
check_environment()
check_arcpy_function()
check_excel_libs()
print("\n" + "=" * 30)
print("测试结束")
四、注意事项
如今大多数开发者都会借助AI辅助编程,这是一种高效的学习与开发方式。
但在使用AI生成的代码时,务必自行审查其准确性。部分情况下可能出现函数调用错误,原因可能包括:中文描述歧义导致翻译偏差、软件版本较新而AI未充分学习、或AI参考了质量较低的开源代码等。
重点检查所使用的函数名称、参数是否符合官方文档规范,确保代码逻辑正确且适配当前运行环境。
在ArcGIS Pro中,找到你所使用的工具箱,点击其右上角的按钮:
问号
随后页面会跳转至官方网站,在该页面中你可以查看到对应工具的详细说明与功能描述:
函数名称



雷达卡


京公网安备 11010802022788号







