alex_bn_lee

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

【306】通过ArcPy编写ArcToolbox

参考:使用 Python 创建工具

参考:在 Python 工具箱中定义参数数据类型


 

基本步骤如下:

(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 函数的语法如下所示:

1
<variable> = arcpy.GetParameterAsText (<index>)

  脚本工具对话框上的参数与 GetParameterAsText 函数的索引值是一一对应的,分别为0、1、2...

  GetParameterAsText 函数会以字符串的形式接收,GetParameter 函数可以将接收的一系列值存储在列表中。GetParameterAsText 函数接收多值(MultiValue)参数时,会将文本用分号(;)隔开,因此可以通过 split 函数将字符串创建成列表。如下所示:

1
2
3
4
5
6
7
8
import arcpy
# 第一个参数,为多值的输入参数
inputFile = arcpy.GetParameterAsText(0)
# 第二个参数,为输出参数
outFile = arcpy.GetParameterAsText(1)
 
# 定义xml列表
file_xmls = inputFile.split(";")

4. 修改脚本工具

  如下图所示可以修改工具,Edit 可以直接打开 .py 文件;Item Description 可以添加说明内容,包括工具的说明以及每一个参数的详细说明;Properties 可以修改向导里面设置的参数内容,将这些设置修改后,最好将工具箱另存为 .tbx,这样新的工具箱就有了新的设置。

  

参考: Arcpy基础方法之Tools&Toolboxes

参考:使用python+Arcpy创建自定义Arctoolbox工具

  对于输入中文容易报错,通过此链接“关于python报错“...ordinal not in range(128)”的解决办法”解决,代码如下:

1
2
3
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

 

posted on   McDelfino  阅读(1295)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2012-04-04 【028】◀▶ 自定义命令 & 工具
点击右上角即可分享
微信分享提示