16-4-第三章 ArcGIS Pro创建 python 脚本工具(四)

前面介绍了一个 实例,对脚本工具的参数进行了介绍,下面就需要对我们新建的脚本工具进行参数设置,这里可以链接到第二节。
原文链接

3.6 设置工具参数

打开前面创建的自定义脚本工具:random sample
在这里插入图片描述
对于参数的设置一方面可是自己手动输入,比如标签和name等,其他的(例如数据类型等)可以通过下拉列表对参数进行设置。

这个脚本工具的第一个自定义参数是输入要素类。第一个参数的标签是Input Features。标签显示参数的信息,应该能明确表达意义,并且标签允许有空格等。Name属性是根据标签设置的默认名称,一般不做修改。要移动到下一个参数,单击单元格或者使用Tab键都可以。通常情况下,对第一个参数的所有的必要的属性都进行了设置后,工具会自动再创建一个新的空的参数。
在这里插入图片描述
接下来对数据类型进行设置,打开参数类型的对话框,默认的数据类型为字符串,选择参数类型为Feature Layer。
在这里插入图片描述
上图中还有两个选项:Multiple values和Table of value,分别是选择多种数据类型和将表中的值作为一个列表传递给脚本,以表格的形式同时输入多个值。这两个选项提供了更复杂情况下的选择。

作者在这里同样对其他地理工具进行了一个示例介绍。例如:union和intersect工具就允许使用 table of values的格式。例如:union工具的第一个输入参数是要素类,但是它允许输入多个要素图层和及其关联的等级。
在这里插入图片描述

具有多个值的参数作为字符串传递给脚本,每个列表元素用分号分开。可以使用 split()方法从字符串中创建元素列表。

import arcpy
input = arcpy.GetParameterAsText(0)
input_list = input.split(";")

作为替代方案,也可以是使用arcpy.GetParameter()处理具有多个值的参数,在这种情况下,结果是一个值的列表,并且是使用索引或迭代的方式获取各个值。

对于包含一个 table of values的参数,可以使用GetParameter去获取一个 ValueTable代替使用字符串或列表。在ValueTable对象中,值存储在行或列组成的虚拟表中。ValueTable是专门为此类参数设计的ArcPy类。

由于各种不同的选项,因此在编写脚本时了解从工具对话框传递给脚本的参数的数据类型很重要。回到random sample脚本工具中,
在这里插入图片描述
对于其他的参数属性,选择默认值就可以了。这些默认值包括Required for Type 和 Input for Direction。

关于Type属性,有三种选择:Required、Optional、Derived。required意味着必须指定参数值才能运行程序,optional意味着运行脚本可以不设置参数值。通常使用optional时会设置一个默认的值。Derived(派生)仅仅意味着用于输出参数,不会出现在工具对话框中,派生参数用于多种情况下:当工具输出为单个值而不是数据集时,当工具使用来自其他参数的信息创建输出时,当工具修改输入而不创建新输出时。

任何工具都会有输出,以便于可以在模型中使用该工具并且从脚本中调用该工具。有时候确保工具具有唯一输出的方法时使用派生参数,具有派生参数的工具,例如:Get CountAdd field工具。以Get Count工具为例,输入参数时要素类、表、栅格,输出是 :行数 a count of the number of rows。这个count是一个标量变量,并且作为Result对象返回。count 包含一个输出参数,并且是一个没有出现在工具对话框中的派生参数。虽然通过参数看,get count工具有两个参数,但是因为有一个派生的输出参数,因此不会出现在对话框中。如图:

在这里插入图片描述
在这里插入图片描述
关于 Direction属性,定义了是输入还是输出,只有这两种选项。对于Derived 的Type,Direction会自动设置成输出。每个工具至少有一个输出。

接下来回到random sample脚本工具,对于第二个参数的设置如下:

Label: Output Features
Name: Output_Features
Data Type: Feature Layer
Type: Required
Direction: Output

第三个参数由随机选择的特征数组成,如下:

Label: Number of Features
Name: Number_of_Features
Data Type: Long (for long integer)
Type: Required
Direction: Input

第三个参数这里,使用Long数据类型可以确保仅仅输入整数型。如果输入的是文本或者十进制的数值,这个工具就不会运行。这个参数还要考虑Filter属性。从逻辑上讲,特征的数量应该是正数,不包括 0 和负数。Filter设置允许值的范围,这个属性的选项是 : None, Range , Value。在range能够打开 范围过滤器对话框,进行如下的设置,设置最大最小值。最小值为1,随便设置一个比较大的最大值就行。
在这里插入图片描述

如果要改变参数的顺序,可以在参数上右键进行移动或者删除。
在这里插入图片描述
作者对Filter参数其他部分进行了介绍:Filter 允许限制输入值。有几种过滤器类型,过滤器类型取决于参数的Data Type,对于Long或者Double类型,过滤器类型为Range 和 Value List。Value List允许指定特定的值的列表。当数据类型为要素类时,只有一个筛选器,是Feature Type,它允许根据几何类型更改参数的有效条目,包括:点、 折线、多边形。

可用的筛选器:
Areal units—acres, hectares, and so on
Feature type—point, polyline, polygon, and so on
Field—short, long, Coat, double, text, and so on
File—custom file extensions (e.g., .csv, .txt, and so on)
Linear units—inches, feet, meters, and so on
Range—values between a specified minimum and maximum value
Time units—seconds, minutes, hours, and so on
Value list—a set of specific custom values
Workspace—file system, local database, or remote database

大多数的数据类型只有一种过滤器类型,设置过滤器可以提高工具的可靠性。

在上面的介绍中,还有几个属性没有介绍,包括Category类别、Dependency依赖关系、Default默认值、Environment 环境、符号系统 symbology,这些属性在 random sample中没有被使用。书的作者对这几个属性也进行了简单介绍。

Category允许在工具对话框中组织工具参数,可以输入名称来创建自己的类别。在使用一次类别后,名称显示为其他参数的下拉选项。同一个类别的参数在脚本工具对话框中组织在一个可扩展的组中。这个分组用于具有许多参数的工具,效果如下所示:在工具分组中还有其他的工具在这里插入图片描述

打开某一个类别:
在这里插入图片描述
Dependency 属性能用于输入和派生的输出参数。在许多情况下,一个工具参数与另一个工具参数密切相关。以下图的删除字段工具为例,只有先输入表之后,才能删掉表里的某个字段。
在这里插入图片描述
使用dependency 属性控制统一工具中的一个参数对另一个参数的依赖。在删除字段工具中,Drop field 参数的Dependency 属性设置为输入表。使用Dependency 属性的第二个原因是使用派生的输出参数。例如:当输入参数被工具修改时,输出派生参数的Depenency属性设置为输入参数。对于删除字段工具,输出参数的Dependency 属性设置为输入表。

derived 导出的输出参数在工具对话框中不可见。

default 属性允许您在脚本工具对话框打开时指定参数的值。如果未指定默认值,则工具对话框中的参数值将为空白。默认值通常用于布尔参数。
Environments 属性提供了另一种设置默认值的选项。这个属性提供了一个包含环境设置的下拉列表。您选择一个特定的设置,当设置此属性时,参数的默认值是从地理处理框架的环境中获取的。

符号系统属性允许您指定图层文件的路径。默认情况下,地理处理工具的输出会添加到当前地图。通过选中“将输出数据集添加到打开的地图”框,可以将行为设置为地理处理选项的一部分。 以这种方式添加的图层的符号系统遵循在 ArcGIS Pro 中向地图添加数据的常规规则 - 换句话说,没有自定义符号系统。 符号系统属性可以设置为自定义图层 文件(.lyrx)。 这个选项仅可用于图层 文件有意义的输出,例如要素图层、栅格、TIN 等。设置符号系统属性不会控制是否将输出添加到打开的地图,因为此选项由地理处理选项控制。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来为你详细解答。 首先,在ArcGIS Pro创建一个Python工具箱。可以按照以下步骤操作: 1. 在Catalog面板中右键单击文件夹,选择“New” > “Python Toolbox”。 2. 在“New Python Toolbox”对话框中,输入工具箱的名称和存储位置,然后单击“OK”。 接下来,在新创建工具箱中创建一个工具。可以按照以下步骤操作: 1. 右键单击工具箱,选择“Add” > “Tool”。 2. 在“Add Tool”对话框中,输入工具的名称和标签,然后单击“Next”。 3. 在“Parameters”页面中,单击“Add Parameter”按钮来添加输入和输出参数。 4. 对于每个参数,设置名称、数据类型、方向和描述。 5. 在“Validation”页面中,可以添加自定义的参数验证逻辑。 6. 单击“Finish”来创建工具。 现在,我们可以在工具的“Source”选项卡中编写Python脚本来实现相交分析。以下是一个简单的示例代码: ```python import arcpy class IntersectTool(object): def __init__(self): self.label = "Intersect Tool" self.description = "Performs intersection analysis on two input features" def getParameterInfo(self): input_feature1 = arcpy.Parameter( name="Input Feature 1", displayName="Input Feature 1", datatype="GPFeatureLayer", parameterType="Required", direction="Input") input_feature2 = arcpy.Parameter( name="Input Feature 2", displayName="Input Feature 2", datatype="GPFeatureLayer", parameterType="Required", direction="Input") output_feature = arcpy.Parameter( name="Output Feature", displayName="Output Feature", datatype="GPFeatureLayer", parameterType="Required", direction="Output") return [input_feature1, input_feature2, output_feature] def execute(self, parameters, messages): input_feature1 = parameters[0].valueAsText input_feature2 = parameters[1].valueAsText output_feature = parameters[2].valueAsText arcpy.Intersect_analysis([input_feature1, input_feature2], output_feature) messages.addMessage("Intersection analysis completed successfully.") return ``` 在这个脚本中,我们创建了一个名为`IntersectTool`的类,其中包含了工具的名称和描述,以及`getParameterInfo`和`execute`方法。 `getParameterInfo`方法用于设置工具的输入和输出参数,我们在这里添加了三个参数:两个输入要素和一个输出要素。 `execute`方法用于执行工具的逻辑。在这个方法中,我们获取输入参数的值,并使用`arcpy.Intersect_analysis`函数执行相交分析,并将结果保存到输出要素中。最后,我们使用`messages.addMessage`函数向用户发送一条成功消息。 在完成代码编写后,保存脚本并切换到工具箱界面。在工具的“Source”选项卡中,单击“Validate”按钮来验证代码是否正确。如果没有错误,就可以单击“Save”按钮来保存工具。 现在,我们就可以在ArcGIS Pro中使用这个工具箱来执行相交分析了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值