【306】通过ArcPy编写ArcToolbox
基本步骤如下:
(1)创建一个 Python 脚本,并保存成 .py 文件。
(2)创建一个自定义工具箱(.tbx 文件),用于存放脚本工具。
(3)通过脚本添加向导向自定义工具箱中添加工具。
(4)修改脚本的输入和输出变量,以便它能无缝地整合到地理处理框架中。
详细说明:
1. 自定义工具箱
如下图所示:在 ArcToolbox 上右键》Add Toolbox...,在出现的对话框中选择右上角的“New Toolbox”,即可以新建一个工具箱


2. 添加脚本
如下图所示,在新建的 Toolbox 上右键》Add》Script,然后进入向导模式

(1)添加名称,Name 为工具名称(无空格),Label 为工具显示名称(可以有空格),Description 则是打开工具是显示的说明内容,选择“存储相对路径”有助于工具的转移,不受路径影响。

(2)导入 Python 脚本文件的路径。
(3)设置工具的参数,包括输入参数和输出参数。
Display Name 为参数的说明,Data Type 为参数的类型
常用参数属性如下所示:
- Type:该属性有三种值,必选、可选以及派生。
- Direction:该属性定义了该参数是输入参数还是输出参数。
- MultiValue:如果设置为 NO,则该参数只能设置一个值。如果设置为 YES,则该参数可以设置一列值。
- Default:默认值,不设置的话,在添加完输入参数后,系统会自动生成输出文件名。
- Filter:可以限制输入参数的数据类型。可以根据所需要的数据类型,设置各种类型的过滤器。
常用 Data Type 如下所示:
- File:通过点击 Filter 属性可以修改扩展名,如下图所示,选择 File,然后填写扩展名,不需要加点。

- Shapefile:shp 文件。
- Folder:文件夹,如果想要设置输出文件夹,Direction 属性也要选择 input。
- Text File:文本文件(txt 文件)。

脚本最后就是生成了对应的文件,若是 shp 文件,如果想要自动添加到当前 data frame 中,可以参考“添加 shp 文件”。
3. 脚本中接收参数
通过 GetParameterAsText 和 GetParameter 函数接收工具传递过来的参数。
GetParameterAsText 函数的语法如下所示:
<variable> = arcpy.GetParameterAsText (<index>)
脚本工具对话框上的参数与 GetParameterAsText 函数的索引值是一一对应的,分别为0、1、2...
GetParameterAsText 函数会以字符串的形式接收,GetParameter 函数可以将接收的一系列值存储在列表中。GetParameterAsText 函数接收多值(MultiValue)参数时,会将文本用分号(;)隔开,因此可以通过 split 函数将字符串创建成列表。如下所示:
import arcpy
# 第一个参数,为多值的输入参数
inputFile = arcpy.GetParameterAsText(0)
# 第二个参数,为输出参数
outFile = arcpy.GetParameterAsText(1) # 定义xml列表
file_xmls = inputFile.split(";")
4. 修改脚本工具
如下图所示可以修改工具,Edit 可以直接打开 .py 文件;Item Description 可以添加说明内容,包括工具的说明以及每一个参数的详细说明;Properties 可以修改向导里面设置的参数内容,将这些设置修改后,最好将工具箱另存为 .tbx,这样新的工具箱就有了新的设置。

参考:使用python+Arcpy创建自定义Arctoolbox工具
对于输入中文容易报错,通过此链接“关于python报错“...ordinal not in range(128)”的解决办法”解决,代码如下:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
【306】通过ArcPy编写ArcToolbox的更多相关文章
- 使用python制作ArcGIS插件(3)ArcPy的使用说明
使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...
- ArcGIS Python编程案例-电子资料链接
ArcGIS Python编程案例(1)-Python语言基础 https://www.jianshu.com/p/dd90816d019b ArcGIS Python编程案例(2)-使用ArcPy编 ...
- 如何使用ArcGIS Pro发布自定义打印服务
我们知道可以通过ArcGIS Map来发布自定义打印服务.从ArcGIS Enterprise 10.6.1版本起,打印服务的功能更加完善了,改进点包括: 支持打印矢量切片服务 改进了智能制图和颜色透 ...
- 笑谈ArcToolbox (3) ArcToolbox的一亩三分地
笑谈ArcToolbox (3) ArcToolbox的一亩三分地 by 李远祥 每个人都会有一些鲜为人知的小秘密,都有着不允许别人染指的一亩三分地.软件是人编写的,当然也会给它留有自己所拥有的一亩三 ...
- 笑谈ArcToolbox (2) 开启ArcToolbox的钥匙
笑谈ArcToolbox (2) 开启ArcToolbox的钥匙 by 李远祥 GIS人遇到ArcToolbox就像找到了宝藏一样兴奋,但并不是每个找到宝藏的人都具备开启宝藏的钥匙.有时候功能强大并不 ...
- 笑谈ArcToolbox (1) ArcToolbox 的发展方向
笑谈ArcToolbox (1) ArcToolbox 的发展方向 by 李远祥 ArcGIS工具箱ArcToolbox具有非常多的工具,相信用过的人都非常惊叹,其功能完备并且强大,种类繁多,总能找到 ...
- arcpy.mapping实战-专题图制图自动化
arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...
- arcpy.mapping-认识arcpy.mapping
arcpy.mapping-认识arcpy.mapping by 李远祥 ArcMap提供了强大的地图制图功能,在实际的工作中,只要涉及到专题地图和地图册的制作,难免会遇到非常多的出图工作和地图图面元 ...
- 使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
随机推荐
- 监听器(Listener)学习(二)
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- BZOJ1597土地购买 【斜率优化DP】
BZOJ1597土地购买 [斜率优化DP] Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足( ...
- sublime python运行插件
Tools->New plugin 粘贴下面代码,在插件目录新建文件夹,保存 import sublime, sublime_plugin import os class ExampleComm ...
- PEP
用python , PEP难以绕过. PEP是什么? Python Enhancement Proposals , 它集合了python的改进提案. 它不是版本递进的, 有些PEP是应该去读一 ...
- ballerina 学习三 根据swagger 以及protobuf 生成code
备注: 基本环境安装就不用介绍了,swagger 以及grpc 同时也不用介绍了,都是比较简单的代码,就是一个简单的测试 1. 初始化项目 ballerina init 项目结构如下: ├── R ...
- Spring核心机制:依赖注入
转载:http://www.cnblogs.com/chenssy/ Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因 ...
- hibernate 多对多一个对象出现多条记录问题
hibernate 多对多时,当须要依据它关联的对象查找的时候,会出现一个对象有多条记录的问题 用 left join fetch 抓取查询的时候还是会出现这问题,是由于主表在关联表中有多条记录 用 ...
- Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(上)
http://forum.china.unity3d.com/thread-32271-1-1.html 我们已经发布了Unite 2018 江毅冰的<发条乐师>.Hit-Point的&l ...
- shell三剑客之find
查找以ini结尾的文件[root@iZj6cbstl2n6r280a27eppZ app]# find / -name "*.ini"/app/myblog/config.ini ...
- redis 命令集
进入客户端 /usr/local/bin/redis-cli 选择数据库 select index (0-15) 退出 quit