# 4.1.调用系统工具箱

## 前言

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

## ArcPy与ArcGIS工具箱之间的关系

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

```
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所示。

![ 图 1 a. 主要参数](/files/-M68Uvac5jhwJMHcvB9P)

![ 图 1 b. 地理数据库设置参数​​​](/files/-M68UvadFB4eAmGH4yW0)

创建要素类工具的参数有要素类位置、要素类名称、几何类型（可选）、模板要素（可选）、包含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所示的帮助内容。这里的工具帮助内容与官网是一致的（可能因版本不同而不同）

![图 2 工具帮助​](/files/-M68UvaeUrPVKZLe9J9e)

2\). 官网查看

可能你安装的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等，一般来说，不同版本号之间其定义**一般**不会有变化。

![图 3 搜索引擎搜索结果​](/files/-M68UvaaFRM1tFilYxpV)

3\). 直接使用

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

![​图 4 工具属性​](/files/-M68Uvafip9z2PQHo3aK)

![图 5 工具箱属性​](/files/-M68UvagQGaKXbOU0oCV)

## 使用扩展模块

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

```
# ArcGIS Spatial Analyst 扩展模块权限检查
if arcpy.CheckExtension("Spatial") == "Available":
    arcpy.CheckOutExtension("Spatial")
    
    # do analysis using ArcGIS Spatial Analyst
​
    arcpy.CheckInExtension("Spatial")
else:
    raise Exception(u"Spatial 模块没有许可权限")
```

**Spatial**是**ArcGIS 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>找到完整的对应。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zxyao.gitbook.io/arcpy/4.arcpy-yu-gong-ju-xiang/4.1.-tiao-yong-xi-tong-gong-ju-xiang.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
