17-3-第四章 Python工具箱(三)

原文链接:

4.4 使用源代码

创建好工具对话框之后,工具还不能运行,还要添加执行任务的代码,这些代码被称为源代码 source code 或者是工具的主体——定义工具和工具参数,并且去自定义工具行为。回顾python脚本工具,脚本工具必须使用GetParameterAsText和 GetParamater函数去修改脚本,以便于接收用户在工具对话框中输入的参数。

python工具箱中的工具的源代码可以在execute方法中找到。这个方法参数可以处理参数和消息。

def execute(self, parameters, messages):

parameters指的是getParameterInfo方法定义的参数列表。使用Parameter对象的valueAsText或value属性来从此列表中获取每个参数的值。下面的代码说明了一个带有两个参数的通用示例。

def execute(self, parameters, messages):
    in_fc = parameters[0].valueAsText
    out_fc = parameters[1].valueAsText

变量的名称不必须与getParameterInfo方法中分配给参数的名称一样。在第三章中random sample脚本,执行感兴趣的任务的原始独立脚本如图所示:
在这里插入图片描述
后来修改成了如下所示。

在这里插入图片描述

脚本工具完整的代码就代表 了源代码,并且使用execute方法复制。一开始代码是必须修改变量的硬编码值(如下代码),修改输入输出和随机采样的数目。

inputfc = "C:/Random/Data.gdb/points"
outputfc = "C:/Random/Data.gdb/random"
outcount = 5

然后修改后:

inputfc = parameters[0].valueAsText
outputfc = parameters[1].valueAsText
outcount = parameters[2].value

修改后的输入输出参数值,使用valueAsText作为字符串接收;第三个参数使用value作为整数接收。

原始脚本中的一些元素可以放在python工具箱文件的顶部,包括导入模块和设置环境属性,现在的.pyt文件的顶部如下所示:

import arcpy
import random

原本的脚本的剩余部分,包括已经修改过的部分,成为了execute方法中的源代码。在去掉空行和注释后,这部分代码如下:

def execute(self, parameters, messages):
    inputfc = parameters[0].valueAsText
    outputfc = parameters[1].valueAsText
    outcount = parameters[2].value
    inlist = []
    with arcpy.da.SearchCursor(inputfc, "OID@") as cursor:
         for row in cursor:
              id = row[0]
              inlist.append(id)
    randomlist = random.sample(inlist, outcount)
    desc = arcpy.da.Describe(inputfc)
    fldname = desc["OIDFieldName"]
   sqlfield = arcpy.AddFieldDelimiters(inputfc, fldname)
    sqlexp = f"{sqlfield} IN {tuple(randomlist)}"
    arcpy.Select_analysis(inputfc, outputfc, sqlexp)

在这里插入图片描述

方法结束时不需要返回,因为结果已经包含在了输出参数中。即:工具将结果保存到新要素类并将其作为active map的一个要素图层返回。一些工具可能需要指定返回的值,如果这些工具没有保存任何内容到磁盘或没有返回任何对象到map中。

至此,工具箱中的random sample工具就可以使用了。

这里使用要明白一点,正在运行的不是random sample的脚本代码,是.pyt工具箱代码中的execute()方法中的代码。

在Tool类包含几个没有使用的方法

在这里插入图片描述
在这三个方法中,updataParameters()方法最为重要,他提供了对工具参数的行为和参数如何交互的额外控制。关于详细的介绍,要在arcgis pro帮助文档(“Customizing Tool Behavior in a Python Toolbox)中。

4.5 脚本工具与工具箱的对比

两种方法都能创建自定义工具,但是还是存在一些不同。首先,两种方法都产生了集成到地理地理框架中的工具,这些工具都可以像是标准工具一样在脚本和模型中使用。

在这里插入图片描述
第二,在组织方面,脚本工具是自定义工具箱.tbx的一部分,每个脚本工具都有一个单独的脚本文件.py,工具对话框的设计是使用Pro的可视化界面就可以万从哼,并且信息存储到代码中。python工具箱下面的多个工具公用一个.pyt文件,完全只能使用代码编程完成。

第三,脚本文件和python工具箱都可以使用python编辑器进行编辑,但默认情况下,.pyt文件不会被识别为python文件,有时候edit .pyt文件可能不会默认idle打开,。

第四,python脚本和.pyt文件都可以使用密码进行保护。

第五,脚本工具和 Python 工具箱都以类似的方式记录。在第 5 章讨论了这个主题。

Points to remember

Python 工具箱提供了创建 Python 脚本工具的替代方法。从用户的角度来看,Python 工具箱中的工具就像常规地理处理工具一样工作。 从开发人员的角度来看,最大的不同是 Python 工具箱完全是用 Python 编写的。 这个特性使 Python 工具箱成为那些在开发工具方面有更多经验的人的首选方法。

Python 工具箱是具有 .pyt 扩展名的 Python Ale,ArcGIS Pro 会自动识别它。一个 Python 工具箱可以包含一个或多个工具。 ArcGIS Pro 中 Python 工具箱的后缀名称是 .pyt 。

新 Python 工具箱提供的基本模板是开始编写代码的有用方式。在 Python 工具箱中,所有工具的代码都驻留在一个 .pyt 中。

包括 PyCharm 在内的一些 Python IDE 可以配置为将 .pyt Ale 识别为 Python 代码,这有助于编写正确的语法。但是,您无法从 IDE 运行 .pyt ,并且只能使用 ArcGIS Pro 中 Python 工具箱中的工具来测试代码。

Python 工具箱的代码包括一个 Toolbox 类,它定义了工具箱的特性,包括工具列表。 还包含每个工具的 Tool 类,类的名称对应于特定工具。

每个 Tool 类都包含几个方法,包括 __init__() 用于定义工具的属性,getParameterInfo() 用于设置工具参数,以及 execute() 用于执行工具的实际任务。设置工具参数需要仔细考虑,尤其是每个参数的数据类型。

脚本工具和 Python 工具箱都可用于使用 Python 创建自定义工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值