使用ArcGIS,一定有一个不可避免要使用的地方,那就是工具箱。ArcGIS的工具箱是ArcGIS最为精髓的地方之一,一切有关于数据的处理、分析等功能都离不开工具箱。本节将向大家介绍如何在ArcPy中调用工具箱。

ArcPy与ArcGIS工具箱之间的关系

在上一节创建shapefile的地方,我们使用过一个函数CreateFeatureclass_management,这其实就对应的就是ArcGIS中“数据管理工具—要素类—创建要素类”工具。CreateFeatureclass_management的定义如下。

  1. CreateFeatureclass_management(out_path, out_name, {geometry_type}, {template}, {has_m}, {has_z}, {spatial_reference}, {config_keyword}, {spatial_grid_1}, {spatial_grid_2}, {spatial_grid_3})

再来看下创建要素类工具,其界面如图1所示。

创建要素类工具的参数有要素类位置、要素类名称、几何类型(可选)、模板要素(可选)、包含M值(可选)、包含Z值(可选)、坐标系(可选)以及地理数据库设置(可选),再来对比CreateFeatureclass_management的形参,我们可以发现,这些都是一一对应的:

  • 要素类位置——out_path
  • 要素类名称——out_name
  • 几何类型(可选)—{geometry_type}
  • 模板要素(可选)—{template},
  • 包含M值(可选)— {has_m},
  • 包含Z值(可选)—{has_z},
  • 坐标系(可选)—{spatial_reference}
  • 地理数据库设置(可选)-配置关键字—{config_keyword}
  • 地理数据库设置(可选)-输出空间格网1—{spatial_grid_1}
  • 地理数据库设置(可选)-输出空间格网2—{spatial_grid_2}
  • 地理数据库设置(可选)-输出空间格网3—{spatial_grid_3}

如果你点击工具的某个输入参数位置,可以在右侧帮助中看到帮助内容与CreateFeatureclass_management的形参的描述是相一致的。事实上,根据本人的理解,ArcPy的大部分都是对ArcGIS的工具箱的包装,当然,ArcPy可能并未将所有的工具都封装成了一个函数(这一点本人没有意义验证工具箱中的所有工具是否都进行了封装,毕竟ArcGIS中的工具太多了),也并未对数据操作提供更为底层的方法(这一点是与AE/.NET进行过对比)。

查看工具对应函数的定义

如何查看ArcGIS中某个工具的ArcPy对应的函数定义呢?有以下三种方式:

  1. 通过工具的右下角的工具帮助

以创建要素类工具为例,点击工具帮助可以看到如图 2所示的帮助内容。这里的工具帮助内容与官网是一致的(可能因版本不同而不同)

  1. 官网查看

可能你安装的ArcGIS是“阉割”后不带有帮助内容的,这时我们可以通过搜索引擎辅助在ArcGIS官网找到相关的帮助,一般来说,前几条会有我们想要的结果。同样以创建要素类工具为例,搜索“arcpy 创建要素类工具”,你可以看到搜索结果(如图 3所示)的第一条记录就是这个工具的帮助页面。为什么不是第二条?你可以看到第二条记录是在pro.arcgis.com域名下,其是ArcGIS Pro版本创建要素类工具的在线帮助页面,本人使用的是ArcGIS Desktop 10.2,因此选择的是第一条记录。

请注意,一定要选对版本(系列),因为ArcGIS Pro和ArcGIS Desktop在同一个函数的定义上可能会有所不同,你可以对比看下关于“创建要素类”这个工具对应的函数在ArcGIS Pro和ArcGIS Desktop的区别,而且ArcGIS Pro使用的是Python3,ArcGIS Desktop依然使用的是Python2.7.x。

同样是Desktop,也有不同的版本号,比如10.2,10.3等,一般来说,不同版本号之间其定义一般不会有变化。

  1. 直接使用

ArcPy中对于工具的函数命名是有一定的规则的:工具箱的别名紧随工具名称之后,中间用下划线隔开,即工具名称_工具箱别名;或者是使用点进行分隔,工具箱的别名在前,工具名称在后,即:工具箱别名.工具名称(在ArcGIS官方的文档中多用的为第一种方式)。例如创建要素类工具,其名称CreateFeatureclass(我们可以通过在“创建要素类工具”右键选择属性进行查看,如图 4所示),其位于工具箱“数据管理工具”下。选中数据管理工具工具箱,右键选择属性进行查看,我们可以看到其有一项为别名management,因此创建要素类工具对应的ArcPy中的函数名为:CreateFeatureclass_management或者management.CreateFeatureclass,再结合工具中的参数,我们即可在ArcPy中使用该工具了。

使用扩展模块

扩展模块一般都得权限一般都需要手动开启,我们在使用扩展模块时,需要先检查扩展模块的许可状况,如果有许可权限,在用完之后还要归还许可,其使用流程如下:

  1. # ArcGIS Spatial Analyst 扩展模块权限检查
  2. if arcpy.CheckExtension("Spatial") == "Available":
  3. arcpy.CheckOutExtension("Spatial")
  4. # do analysis using ArcGIS Spatial Analyst
  5. arcpy.CheckInExtension("Spatial")
  6. else:
  7. raise Exception(u"Spatial 模块没有许可权限")

SpatialArcGIS Spatial Analyst 扩展模块的关键字,每个模块都有一个关键字对应:

  • 3D —ArcGIS 3D Analyst 扩展模块
  • Datareviewer —ArcGIS Data Reviewer for Desktop
  • DataInteroperability —适用于 Desktop 的 ArcGIS Data Interoperability 扩展模块
  • Airports —ArcGIS for Aviation: Airports
  • Aeronautical —ArcGIS for Aviation: Charting
  • Bathymetry —ArcGIS for Maritime: Bathymetry
  • Nautical —ArcGIS for Maritime: Charting
  • GeoStats —ArcGIS Geostatistical Analyst 扩展模块
  • Network —ArcGIS Network Analyst 扩展模块
  • Spatial —ArcGIS Spatial Analyst 扩展模块
  • Schematics —ArcGIS Schematics 扩展模块
  • Tracking —ArcGIS Tracking Analyst 扩展模块
  • JTX —ArcGIS Workflow Manager for Desktop
  • ArcScan —ArcScan
  • Business —Business Analyst
  • Defense —Esri Defense Solution
  • Foundation —Esri Production Mapping
  • Highways —Esri Roads and Highways
  • StreetMap —StreetMap

你可以在https://desktop.arcgis.com/zh-cn/arcmap/10.4/analyze/python/access-to-licensing-and-extensions.htm找到完整的对应。