If-then-else 逻辑看似简单,功能却十分强大,它可以根据不同条件执行不同的操作。If-then-else 逻辑可理解为:如果某个条件为 true (IF),则执行某个操作;如果条件为 false (ELSE),则执行其他操作。

在模型构建器中使用 if-then-else 逻辑

在模型构建器中,可通过编写脚本工具的方式来实现 if-then-else 逻辑,该工具针对特定条件进行检验并随后输出两个用于描述 true 和 false 条件的布尔变量,然后将此脚本工具加入到模型中。除了编写脚本工具这种方式外,您也可以使用计算值工具对条件进行检验并输出一个布尔值。

下面的模型加入了一个称为 Check Coordinate System 的脚本工具来使用分支逻辑。此脚本工具将对输入数据集进行评估并指明数据集使用的是投影坐标系中的美国国家平面坐标系还是未知坐标系。在模型中,如果发现输入数据集使用的是投影坐标系中的美国国家平面坐标系,将不执行任何操作。但如果发现输入数据集使用的是未知坐标系,模型将会定义一个投影系统并对输入数据进行投影。在模型构建器中使用分支逻辑的关键步骤之一就是将其中某个条件输出设置为进行进一步处理的前提条件。

if-then-else 逻辑示例

以下示例代码显示了如何在上面提到的 Check Coordinate System 脚本工具中实现 if-then-else 分支。脚本将输出两个变量,一个表示 if (true) 条件,另一个表示 else (false) 条件。

检查坐标系示例

此示例将检查输入数据使用的是美国国家平面坐标系、未使用投影坐标系还是使用美国国家平面坐标系以外的其他坐标系。

# Import modules
import arcpy
import sys
import traceback # Set local variables
prj = ""
indata = "C:/ToolData/well.shp"
dsc = arcpy.Describe(indata)
sr = dsc.spatialReference
prj = sr.name.lower() try: # check if indata is in StatePlane, has no PRJ, or one other than StatePlane
if prj.find("_stateplane_") > -1:
# Set the Is Unknown parameter to FALSE, and the Is StatePlane parameter to TRUE
arcpy.SetParameterAsText(1,"false") #The first parameter refers to the "Is Unknown" variable
arcpy.SetParameterAsText(2,"true") #The second parameter refers to the "Is StatePlane" variable
arcpy.AddMessage("Coordinate system is StatePlane") elif prj == "unknown":
# Set the Is Unknown parameter to TRUE, and the Is StatePlane parameter to FALSE
arcpy.SetParameterAsText(1,"true")
arcpy.SetParameterAsText(2,"false")
arcpy.AddMessage("To continue, first define a coordinate system!") else:
# Set the Is Unknown parameter to FALSE, and the Is StatePlane parameter to FALSE
arcpy.SetParameterAsText(1,"false")
arcpy.SetParameterAsText(2,"false")
arcpy.AddMessage("Coordinate system is not StatePlane or Unknown") except Exception as e:
AddPrintMessage(e[0], 2)

请参阅下列在模型中使用 if-then-else 逻辑的博客中的示例:

使用 If-Then-Else 逻辑进行分支的更多相关文章

  1. PHP 分支与循环

    一.概述: 上面一章我们讲解了PHP当中的运算符和表达式,通过上面的知识点我们就可以完成一些基本的运算操作了.但是涉及到一些比较复杂的逻辑,分支与循环就必不可少了.通过分支和循环的结合使用可以使业务更 ...

  2. CPU 分支预测

    去年在安宁庄的时候, 有个同事阐述了一个观点:php中的if else  在执行时考虑到效率的原因,不会按我们的代码的顺序一条一条去试,而是随机找出一个分支,执行,如果不对,再随机找到一个分支 当时由 ...

  3. javascript大神修炼记(3)——条件分支

    读者朋友们好,我们今天接着前面的讲,前面已经大概了讲了一下运算符,今天的任务主要就是讲解逻辑条件分支,循环. 我们先就来模拟一个逻辑块,就用我们经常接触到的买车票来说吧,车票的价格对不同的人价格是有差 ...

  4. 如何在代码层面提供CPU分支预测效率

    关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...

  5. .net软件自动化测试笔记(API-2)

    1.9获得测试运行时间如何获得测试运行的总时间设计:DateTime.Now属性记录测试开始运行时间,以及测试结束时间,用一个TimeSpan对象计算本次运行的总时间 DateTime starTim ...

  6. Django学习之五:Django 之 注意事项及汇总

    目录 Django 之 注意事项及汇总 全局 settings model模块-模型模块 URLs模块 Templates System 模版模块 View/HttpRequest/HttpRespo ...

  7. 性能调优之Mapping

    Mapping层级的调优可能会花费时间,但是性能调优的效果确实非常显著的 优化Target,Source之后,可以调优Mapping 通常的方法是尽可能减少组件及组件的字段间不必要的连线 即尽可能用最 ...

  8. Dubbo源码分析之SPI(三)

    一.概述 本篇介绍自适应扩展,方法getAdaptiveExtension()的实现.ExtensionLoader类本身很多功能也使用到了自适应扩展.包括ExtensionFactory扩展. 通俗 ...

  9. Shell入门01

    Shell入门 1.基于硬件的虚拟化 2.基于平台的虚拟化 3.基于服务的虚拟化 4.基于库的虚拟化 5.基于操作系统的虚拟化 管理员使用Shell程序与操作系统进行交互,之前学习的shell脚本都是 ...

随机推荐

  1. [LeetCode] 121. 买卖股票的最佳时机 ☆(动态规划)

    https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/xiang-xi-tong-su-de-si-lu- ...

  2. python之约束、加密及logging模块

    一.什么是约束? 在生活中的约束大概就是有什么原因,导致你不能做这件事情了,称之为约束.而在python中的约束是在当多个类中,都需要使用某些方法时,需要人为抛出异常或使用基类+异常处理来进行约束 c ...

  3. SQL Server 2005的几个新功能

    SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的. 举几个例子来简单说明 这些例子我引用了Northwind库. 1. TOP 表达式  SQL Serv ...

  4. Vue界面中关于APP端回调方法问题

    在混合开发中,HTML界面经常性的需要调用APP端提供的原生方法,而且在很多时候,APP端需要各种回调,如果将所有的回调方法写在内部,不是很方便,而且有些时候,APP端需要定义一些主动触发HTML界面 ...

  5. python_面向对象——编程步骤

    校园管理系统: 设计一个学校机构管理系统,有总部.分校.有学院.老师.员工,实现具体如下需求: 1.有多个课程,课程要有定价 2.有多个班级,班级跟课程有关联 3.有多个学生,学生报名班级,交这个班级 ...

  6. Jmeter之JDBC类型组件

    一.背景 在测试过程中,避免不了与数据库打交道,比如数据的校验.数据的准备或者重置操作,又或者对数据库进行增删改查,基于以上诉求,在Jmeter中是如何实现的呢.可使用JDBC类型组件来实现以上功能操 ...

  7. [go] 循环与函数

    练习:循环与函数 为了练习函数与循环,我们来实现一个平方根函数:用牛顿法实现平方根函数. 计算机通常使用循环来计算 x 的平方根.从某个猜测的值 z 开始,我们可以根据 z² 与 x 的近似度来调整 ...

  8. eslint 对下一行不要校验报错

    eslint 对下一行不要校验报错: <--eslint-disable-next-line--> <div>todo</div> 扩展知识: stylelint ...

  9. SIGAI机器学习第十六集 支持向量机3

    讲授线性分类器,分类间隔,线性可分的支持向量机原问题与对偶问题,线性不可分的支持向量机原问题与对偶问题,核映射与核函数,多分类问题,libsvm的使用,实际应用 大纲: 多分类问题libsvm简介实验 ...

  10. Java链接Redis时出现 “ERR Client sent AUTH, but no password is set”

    Java链接Redis时出现 “ERR Client sent AUTH, but no password is set” 异常的原因及解决办法. [错误提示] redis.clients.jedis ...