If-then-else 逻辑的功能十分强大,它可以根据不同条件执行操作。If-then-else 逻辑可理解为:如果条件为真,则执行操作;否则执行其他操作。
在 ModelBuilder 中,可以使用内置的逻辑工具集或使用自定义 Python 函数或脚本工具来添加 if-then-else 逻辑。
逻辑工具
逻辑工具是 ModelBuilder 实用工具中的一个类别,可帮助您控制模型中的流程流,并启用 if-then-else 分支逻辑。
| 实用工具 | 说明 | 
|---|---|
| 用于评估指定数据是否已存在。 | |
| 用于评估输入数据是否具有指定字段。 | |
| 评估输入数据是否有选择以及是否选中了特定数量的记录。 | |
| 用于评估输入数据是否具有指定的坐标系。 | |
| 用于评估输入数据是否与指定数据类型相匹配。 | |
| 用于评估要素类是否为指定要素类型。 | |
| 用于评估属性字段中的值是否与指定的值、表达式或第二个字段相匹配。 | |
| 评估输入数据的行计数是否与指定的值匹配。 | |
| 用于评估输入是否有指定的空间关系。 | |
| 可使用定义的比较运算符对输入值与单一值、值列表或值范围进行估算。 | |
| 合并分支工具可将两个或多个逻辑分支合并为单个输出。 | |
| 如果所有输入值均满足指定的 True 或 False 条件,则停止迭代。该工具的功能与 While 循环迭代器非常类似,但如果模型中存在一个 While 循环迭代器且没有其他迭代器可添加时,则该工具对于停止模型非常有用。 | 
Python
除了 ModelBuilder 中的内置逻辑工具之外,您还可以编写您自己的函数和工具,通过计算值工具执行使用自定义 Python 函数的 if-then-else 分支。这些函数可以使用各种 arcpy 和其他 Python 功能对条件进行测试,并输出布尔型 true 和 false 变量。同样,您可以写入一个用于对条件进行检验并输出布尔型 true 或 false 变量的 Python 脚本,将该脚本设置为地理处理脚本工具,并将脚本工具添加到模型。
了解条件
在从系统工具中选择或编写自定义脚本之前,最好了解基于矢量或栅格数据类型的条件逻辑。
仅当文件存在时运行模型
以下示例使用如果数据已存在工具来检查特定工作空间中是否存在数据;如果确实存在数据,则请继续运行模型中的下一个工具添加字段。如果数据不存在,则请在添加字段之前从备份位置复制要素类。

仅当输入具有特定坐标系时才运行模型
以下示例使用如果坐标系为工具来检查输入要素类的坐标系是否为 GCS_WGS_1984。如果布尔输出为 False,则模型将使用投影工具将输入要素类投影到 GCS_WGS_1984。

仅当输入要素类是特定几何类型时才运行模型
以下示例使用如果要素类型为工具来检查输入的要素类型是否为点。如果布尔输出为 True,则请运行下一个工具添加位置。如果布尔输出为 False,则请在运行添加位置工具之前将输入要素转换为点。合并分支工具将合并 True 和 False 分支,以便可以在任一分支上运行求解工具。

根据条件修改字段值
以下示例使用如果字段值为工具来检查输入要素类是否具有 Type 字段值等于 A 的任何记录。如果布尔输出为 True,则请使用按属性选择图层工具来选择类型 A 要素,然后使用计算字段工具来修改 Description 字段值。

仅当 SQL 查询生成任何所选要素时才运行模型
以下示例使用如果选择已存在工具检查输入要素类是否具有任何所选要素。如果布尔输出为 True,则请使用计算字段工具来计算 Description 字段的值。如果布尔输出为 False,则请使用按属性选择图层工具进行选择并修改字段值。

仅当输入是特定数据类型时才运行模型
以下示例使用解析路径工具来获取文件扩展名。如果值为工具将检查扩展名是否与值参数匹配。该模型仅复制带有 .tif 扩展名的栅格数据。

对栅格执行布尔评估
可以使用测试、条件函数、大于和栅格计算器工具对栅格执行布尔评估。在以下示例中,如果像元值大于 2000,则设置为 1 (True),否则设置为 0 (False)。

对栅格执行条件评估
可以使用条件函数或栅格计算器工具依照相应条件来评估栅格。在以下示例中,如果像元值大于 2000,则保留输入值,否则将其设置为 NoData。将条件函数工具的输入条件为假时所取的栅格数据或常数值参数留空时会将该值设置为 NoData。或者,您可以为输入条件为假时所取的栅格数据或常数值参数提供另一个栅格或常数值。

通过查询从栅格中提取像元
按属性提取、创建栅格图层和按属性选择图层工具可用于从栅格中提取像元。以下示例显示了创建像元值大于 2000 的栅格或栅格图层的方法。

通过查询从栅格中提取像元并将其设置为 NoData
设为空函数、重分类和栅格计算器工具可用于从栅格中提取像元并将其设置为 NoData。如果像元值大于 2000,则将其设置为 NoData,否则使用输入数据值。

通过查询从栅格中提取 NoData 像元并对其进行修改
带有条件函数工具的为空工具或栅格计算器工具可用于从栅格中提取 NoData 像元并对其进行修改。在以下示例中,如果像元值为 NoData,则将其设置为 0,否则使用输入数据值。
