计算值 (Data Management)
摘要
计算值工具可基于指定的 Python 表达式返回值。
用法
-
此工具专用于模型构建器,不能用于 Python 脚本编辑。
-
在模型构建器中使用数据类型参数可将 Calculate Value 工具的输出与其他工具相连接。例如,如果使用 Calculate Value 工具计算一个距离并将其用作 Buffer 工具的缓冲距离参数的输入,则请为数据类型参数指定线性单位。
-
虽然此工具可以使用在模型构建器中创建的变量,但是表达式参数中需要使用的变量无法连接到计算值工具。要在表达式中使用它们,请将变量名称用百分号 (%) 括起。例如,如果要将名称为“Input”的变量除以 100,表达式将为 %Input%/100。
注:在上面的表达式中,如果 Input = 123,此表达式将返回 1。要获得保留小数位的值,请将各值的小数位添加到此表达式中。例如:%Input%/100.00 将返回 1.23。下图显示的是另一个在表达式中使用变量的示例。
警告:在表达式中,字符串类型的行内变量应使用引号括起 ("%字符串变量%")。数值类型的行内变量(双精度型、长整型)不需要使用引号括起 (%双精度型%)。
-
只能使用标准 Python 格式创建表达式。不支持其他脚本语言。
-
Calculate Value 工具可对简单的数学表达式进行求值。例如:
- 3+5
- 9*8
- 4+(9/3)
-
Calculate Value 工具允许使用 Python 数学模块执行更为复杂的数学运算。通过在所需函数前添加“math”可访问相应数学模块。例如:
- math.sqrt(25)
- math.cos(0.5)
-
数学模块还支持常量。例如:
- math.pi
-
支持 arcgis.rand() 函数。已为 ArcGIS 工具创建 arcgis.rand() 函数,不应将此函数与 Python Rand() 函数相混淆。以下是 arcgis.rand() 的使用示例:
- 计算从 0 与 10 之间均匀分布的整数中获取的随机值。arcgis.rand("Integer 0 10")
- 计算从平均值为 10 且标准差为 3 的正态分布中获取的随机值。arcgis.rand("Normal 10 3")
警告:表达式 arcgis.rand 必须使用小写字符输入。
-
通常,将在表达式参数中输入表达式。诸如多行计算或逻辑运算 (if, then) 等更为复杂的表达式需要使用代码块参数。代码块参数不能单独使用;此参数必须与表达式参数结合使用。
可从表达式中引用代码块参数中定义的变量。
函数可在代码块参数中定义,并可从表达式中调用。在以下示例中,函数将基于随机输入值返回风向字符串。在 Python 中,各函数可通过 def 关键字定义,关键字后为函数的名称以及函数的输入参数。在本示例中,函数为 getWind 并包含一个参数 wind。使用 return 关键字会将值从函数中返回。
您可通过“表达式”参数传递变量,还可将 if-else 逻辑用于代码块中的行内变量,如下所示。代码块将检查 Input Cell Size 变量是否为空,然后根据条件返回值。
Python 方法可直接在工具的“表达式”参数中使用。例如,如果输入值带有小数(输入表的字段值即为这种情况),并且您想通过行内变量替换在其他工具的输出名称中使用此值,则可在 Calculate Value 工具表达式中使用 Python 方法 replace 替换此小数。
可以调用 Python 模块,还可以在代码块参数中合并或堆叠 Python 方法(例如 replace)。在以下示例中,时间模块将被导入到代码块中,此代码块将返回当前日期和时间,如 Fri Mar 19 2010 09:42:39。此返回值在 Create Folder 工具中用作名称,用来命名文件夹。由于文件夹的名称不能包含空格或标点符号,因此 Python 中的 replace 方法的使用方式为,为每个需要替换的元素堆叠此方法。在本示例中,得到的文件夹名称为 FriMar192010094239。
如果要在此模型中计算某个值,并希望将计算所得的值用于需要缓冲距离值和线性单位的工具(例如 Buffer),您需要执行以下操作:
- 将代码块中的线性单位与距离值一同返回,
- 如下图所示更改返回值的数据类型,然后
- 将数据类型参数设置为线性单位,这样,表达式的结果将被转换为线性单位值。
在任何接受栅格或常数值的 Spatial Analyst 工具中,可以直接使用计算值工具的输出结果,例如,加、大于和小于(这些工具位于 Spatial Analyst 工具箱/数学工具集中)。要使用计算值的输出结果,请将输出数据类型更改为“格式化的栅格”。此输出数据类型格式是单元值由公式或常量表示的栅格表面。
-
在 Python 中,部分语法将适当缩进。缩进程度(两个空格或四个空格)可任意设置,但在整个代码块中缩进程度必须保持一致。
-
无法从代码块访问模型变量。此类变量必须从表达式传递到代码块。此操作可通过在代码块中创建定义并在表达式框中引用所创建的定义来实现。
不应在表达式中使用类型为列表的模型变量。考虑到列表变量在模型构建器中的工作方式,“计算值”将使用列表变量中的第一个值执行一次,列表变量中的其他值不会传递给“计算值”。
编写 Python 脚本时,请使用标准 Python 语句,而不是计算值工具。
语法
参数 | 说明 | 数据类型 |
expression |
要进行求值的 Python 表达式。 | SQL Expression |
code_block (可选) |
附加 Python 代码。可以在“表达式”参数中引用代码块中的代码。 | String |
data_type (可选) |
从 Python 表达式返回的输出的数据类型。应在模型构建器中使用此参数,以便将“计算值”工具与其他工具相连接。 | String |