杰瑞科技汇

arcgis python 二次开发

什么是 ArcGIS Python 二次开发?

就是利用 Python 编程语言,结合 Esri 提供的 Python 库(主要是 ArcPy),来扩展和定制 ArcGIS 平台的功能,它不仅仅是简单地执行一些操作,更是通过编写脚本、工具和独立应用程序,实现复杂的地理工作流程自动化。

arcgis python 二次开发-图1
(图片来源网络,侵删)

核心优势:

  1. 自动化:将重复性的手动操作(如数据转换、批量处理、模型构建)脚本化,节省大量时间。
  2. 可扩展性:可以轻松处理海量数据,实现手动操作难以完成的复杂分析和迭代。
  3. 可复用性:编写的脚本和工具可以方便地分享给团队成员,确保工作流程的一致性和标准化。
  4. 集成性:Python 拥有庞大的生态系统,可以轻松地将 ArcGIS 与其他库(如 Pandas, NumPy, Matplotlib)结合,进行更深入的数据科学分析。
  5. 免费:Python 和 ArcPy 都包含在 ArcGIS Desktop(ArcMap, ArcGIS Pro)和 ArcGIS Enterprise 的许可中。

核心工具库:ArcPy

ArcPy 是 Esri 官方提供的 Python 站点包,是 ArcGIS Python 开发的基石,它允许你通过 Python 访问和操作 ArcGIS 平台的所有地理处理工具和数据。

主要功能模块:

  • arcpy.env: 环境设置模块,用于设置工作空间、输出坐标系、覆盖输出等。
  • arcpy.analysis: 分析工具模块,如缓冲区、叠加分析、空间连接等。
  • arcpy.conversion: 数据转换模块,如要素类转栅格、栅格转点等。
  • arcpy.management: 数据管理模块,如创建、删除、复制、描述数据集和工具等。
  • arcpy.sa (Spatial Analyst): 空间分析模块,提供所有空间分析工具的功能,需要 Spatial Analyst 扩展许可。
  • arcpy.mp (ArcGIS Pro): ArcGIS Pro 地图布局和工程模块,用于通过 Python 操作工程、地图和布局。
  • arcpy.da (Data Access): 数据访问模块,提供了更高效地遍历和编辑要素类和表的游标。
  • arcpy.mp (ArcGIS Pro): ArcGIS Pro 地图布局和工程模块,用于通过 Python 操作工程、地图和布局。

开发环境准备

  1. 安装 ArcGIS 产品:你需要安装 ArcGIS Desktop (ArcMap 或 ArcGIS Pro) 或 ArcGIS Enterprise,ArcGIS Pro 是目前的主流和未来方向,其 Python 环境集成得更好。
  2. Python 环境
    • ArcGIS Pro:自带一个独立的 Python 环境(称为 ArcGIS Pro 自带 Python),你不需要单独安装 Python,直接在 Pro 的“分析”选项卡中打开 Python 窗口即可。
    • ArcMap:也自带 Python 2.7 环境,但更推荐使用外部 Python 发行版(如 Anaconda),特别是当你需要使用较新的 Python 库(如 Pandas, GeoPandas)时。
  3. IDE (集成开发环境):虽然 ArcGIS Pro 自带的 Python 窗口可以交互式执行代码,但对于编写复杂脚本,强烈推荐使用专业的 IDE:
    • Visual Studio Code (VS Code):免费、轻量、插件丰富(如 Python 插件、Jupyter 插件),是目前最推荐的选择。
    • PyCharm:功能强大的 Python IDE,社区版免费。
    • Spyder: Anaconda 自带的,适合科学计算。
    • Jupyter Notebook/Lab:非常适合数据探索、可视化和教学,可以逐步执行代码并查看结果。

一个简单的示例:批量创建缓冲区

假设我们有一个包含多个点要素的文件夹,我们需要为每个点要素创建一个 1 公里的缓冲区,并将结果保存到另一个文件夹。

使用 ArcPy 实现:

# -*- coding: utf-8 -*-
import arcpy
import os
# --- 1. 环境设置 ---
# 设置工作空间,包含输入要素的文件夹
input_folder = r"C:\Data\Inputs"
# 设置输出文件夹
output_folder = r"C:\Data\Outputs"
# 设置输出坐标系(非常重要!)
output_coordinate_system = arcpy.SpatialReference(4326) # WGS1984
# 检查并创建输出文件夹
if not os.path.exists(output_folder):
    os.makedirs(output_folder)
# --- 2. 设置 arcpy 环境变量 ---
arcpy.env.workspace = input_folder
arcpy.env.overwriteOutput = True # 允许覆盖已存在的输出文件
# --- 3. 遍历处理 ---
# 使用 ListFeatureClasses 列出工作空间中的所有要素类
feature_classes = arcpy.ListFeatureClasses()
# 遍历找到的每个要素类
for fc in feature_classes:
    # 定义输出文件的完整路径
    output_buffer_path = os.path.join(output_folder, f"{fc}_buffer.shp")
    print(f"正在处理: {fc}")
    try:
        # --- 4. 执行地理处理工具 ---
        # 执行 Buffer 工具
        # 第一个参数是输入要素
        # 第二个参数是输出要素类路径
        # 'KILOMETERS' 是距离单位
        # 'FULL' 是缓冲区类型
        arcpy.analysis.Buffer(fc, output_buffer_path, "1 KILOMETERS", "FULL", "ROUND", "NONE", "", output_coordinate_system)
        print(f"成功创建缓冲区: {output_buffer_path}")
    except arcpy.ExecuteError:
        # 捕获并打印 ArcGIS 工具执行错误
        print(arcpy.GetMessages(2))
    except Exception as e:
        # 捕获并打印其他 Python 错误
        print(f"处理 {fc} 时发生未知错误: {e}")
print("所有处理完成!")

如何运行这个脚本?

  1. 将代码保存为 .py 文件(batch_buffer.py)。
  2. 确保 C:\Data\Inputs 文件夹里有你的点要素(.shp 文件)。
  3. 打开命令提示符 (CMD) 或 PowerShell。
  4. 运行 python C:\path\to\your\script\batch_buffer.py

进阶主题

当你掌握了基础后,可以探索更高级的应用:

创建自定义工具

你可以将 Python 脚本封装成地理处理工具,使其在 ArcGIS Pro/ArcMap 的地理处理框架中可用,就像内置工具一样。

  • 工具箱:使用 .atbx 文件来组织和打包你的工具。
  • 参数:通过 arcpy.mpToolValidator 类为你的工具定义输入输出参数(如要素类、字段、数值等),用户就可以在图形界面中交互式地使用你的工具。
  • 文档:可以为工具添加帮助文档和使用说明。

使用 ArcPy.da 高效遍历数据

传统的 arcpy.SearchCursor 速度较慢。arcpy.da.SearchCursor 使用 NumPy 数组作为后端,性能有数量级的提升。

import arcpy
fc = "C:/Data/roads.shp"
fields = ["SHAPE@", "NAME", "LENGTH"] # @符号表示几何对象
with arcpy.da.SearchCursor(fc, fields) as cursor:
    for row in cursor:
        # row[0] 是几何对象
        # row[1] 是 NAME 字段的值
        # row[2] 是 LENGTH 字段的值
        print(f"道路名称: {row[1]}, 长度: {row[2]}")

与 ArcGIS API for Python 结合

这是非常重要的区分:

  • ArcPy:主要用于后台数据处理、地理处理自动化、数据管理,它与 ArcGIS Desktop/Engine/Server 紧密集成,直接操作地理数据库和文件。
  • ArcGIS API for Python:主要用于GIS Web 应用开发、数据可视化、空间分析,它是一个独立的库,可以连接到 ArcGIS Online、ArcGIS Enterprise Portal 进行内容管理、数据查询和地图渲染。

一个典型的混合工作流:

  1. 使用 ArcPy 在服务器上 nightly 运行一个脚本,从数据库提取数据并处理成分析结果。
  2. 使用 ArcGIS API for Python 编写一个 Jupyter Notebook,连接到 Portal,将 ArcPy 生成的结果发布为 Web 图层,并进行交互式可视化和分析。

与数据科学生态库集成

ArcPy 处理的是 arcpy.Arrayarcpy.Point 等对象,而 Pandas 处理的是 DataFrame。arcpy.da 提供了 arcpy.da.FeatureClassToNumPyArrayarcpy.da.NumPyArrayToFeatureClass 作为桥梁,让你可以在两者之间无缝切换。

import arcpy
import pandas as pd
# 将要素类转换为 Pandas DataFrame
fc = "C:/Data/cities.shp"
fields = ["CITY_NAME", "POPULATION"]
arr = arcpy.da.FeatureClassToNumPyArray(fc, fields, null_value=-9999)
df = pd.DataFrame(arr)
# 使用 Pandas 进行分析
df['POPULATION'] = df['POPULATION'].replace(-9999, 0)
avg_pop = df['POPULATION'].mean()
print(f"平均人口: {avg_pop}")
# ... 其他分析 ...
# 将处理后的 DataFrame 写回为新的要素类
arcpy.da.NumPyArrayToFeatureClass(df.to_records(index=False), "C:/Data/cities_processed.shp", fields)

学习资源

  1. 官方文档 (最重要)
  2. Esri 官方教程
  3. 社区与博客
  4. 书籍
    • Python for ArcGIS by Silas Toms
    • Mastering ArcGIS by Maribeth Price (虽然主要是 ArcMap,但 ArcPy 部分依然有价值)

ArcGIS Python 二次开发是现代 GIS 从业者的必备技能,它将你从一个“工具使用者”提升为“流程构建者”,从最简单的脚本开始,逐步掌握 ArcPy 的核心功能,然后探索自定义工具、高效数据处理和生态集成,你将能够高效地解决各种复杂的地理空间问题。

分享:
扫描分享到社交APP
上一篇
下一篇