根据像元值在指定的条件语句中被评估为 true 还是 false,条件函数工具允许您控制每个像元的输出值。
如果像元被判定为 true,则其将获得一个值。 如果像元被判定为 false,则其将获得另一个值。 当像元被判定为 true 时,它将获得的值由输入条件为真时所取的栅格数据或常数值参数指定。 当像元被判定为 false 时,它将获得的输出值由输入条件为假时所取的栅格数据或常数值参数指定。
从概念上讲,在处理过程中,条件函数工具会访问各像元的位置并根据像元的值和条件语句来确定该像元被判定为 true 还是 false。 如果像元被判定为 true,则该像元位置的输出值由条件为真的输入进行定义。 如果像元被判定为 false,则该像元位置的输出值由条件为假的输入进行定义。
在地理处理环境中,有两种方法可以确定像元位置求值结果是 true 还是 false:根据输入栅格数据自身的值,或根据应用了可选输入表达式的栅格数据的结果值。 如果仅使用输入栅格,则输入栅格中的所有非零值均被视为 true,所有零值均被视为 false。 分配 NoData 的像元将获得 NoData 作为输出。 NoData 并不等同于 false。
许多 Spatial Analyst 工具可用于创建条件输入栅格。 特别是可以使用“数学”工具箱中的逻辑工具,其中的条件判定工具非常有帮助。
在地图代数中使用“条件函数”工具
要在地图代数的栅格数据集中执行条件判定,请将栅格数据集作为条件栅格输入到条件函数工具中。 输入 true 栅格以提供当条件评估为 true 时要返回的值。 输入 false 栅格以提供当条件评估为 false 时要返回的值。 Where 子句参数将定义要使用输入条件栅格进行评估的表达式。
示例
例如,要基于像元的坡度(由输入条件栅格数据确定),用值 10(指定为真常量)来标识好的构造,而用值 1(指定为假常量)标识不适宜的构造,并且认定小于 15% 的坡度是好的构造,请使用表达式 "VALUE < 15"。 如果一个像元的坡度小于 15%,那么它将获得为条件真指定的值(此例中为 10);否则,它将获得为条件假指定的值(此例中为 1)。
OutRas = Con(SlopeRas, 10, 1, "VALUE < 15")
在地图代数中使用“条件函数”工具创建复杂表达式
在地图代数中,与简单的逻辑条件相比,使用表达式可以获得更多功能。 例如,对于复杂表达式,可以在其中嵌套多个单独的表达式、指定多个栅格或者使用其他工具和运算符。
任何可以得出栅格数据的有效地图代数表达式都能用作输入条件、“真”栅格输入或“假”栅格输入的参数。
如果输入条件栅格表达式用在复杂表达式中,则应删除表达式参数。 在这种情况下,条件函数工具的语法具有如下所示的一般形式:
Con(in_conditional_raster, true_raster, {false_raster})
该情况下删除表达式参数是因为条件栅格数据由地图代数表达式提供。地图代数表达式会返回一个栅格数据集,例如,如果执行的是逻辑运算,则将返回一个值为 0 和 1 的栅格数据集。
示例
以下示例将使用复杂表达式来执行条件评估:
- 以下示例将在条件函数工具中使用复杂表达式:
在以上表达式中,如果 InRas 中的像元值小于 15,则输出栅格中该像元位置将被赋予值 10(真);否则,如果像元值大于或等于 15,则输出栅格中该像元位置将被赋予值 1(假)。OutRas = Con(InRas < 15, 10, 1)
- 如果没有为 false 表达式指定任何值或表达式,请使用以下表达式:
除了值为 15 或大于 15 的像元被分配 NoData 之外,其他输出结果将与上例中的输出结果相同。OutRas = Con(InRas < 15, 10)
- 可以使用任意有效表达式来代替 true_expression 和 false_expression 参数值。
以上表达式将计算所有大于 5 的值的正弦和所有小于或等于 5 的值的余弦,并将结果发送至 OutRas。OutRas = Con(InRas1 > 5, Sin(InRas1), Cos(InRas1))
- 条件函数工具可以使用多条件语句,但是,如果条件判定结果为“真”,每个条件语句必须都有能够指定输出像元值的值或表达式 true_expression。 如果条件评估的结果均不为 true,则可以应用可选值或表达式 false_expression。
以上表达式将为小于 5 的值计算正弦,为大于等于 5 但小于 20 的值计算余弦,而大于等于 20 但小于等于 50 的像元值将被赋予值 0,大于 50 的像元值将被赋予值 100。OutRas = Con(InRas1 < 5, Sin(InRas1), Con(InRas1 < 20, Cos(InRas1), Con(InRas1 > 50, 100, 0)))
- 在条件函数工具的条件表达式中可以使用多种条件。
在以上表达式中,如果 InRas1 中的输入栅格数据大于 5 且小于 10,为该位置赋予值 5,否则,为该位置赋予值 100。OutRas = Con((InRas1 > 5) & (InRas1 < 10), 5, 100)
- 可对条件表达式和判定结果中的输入栅格数据应用工具和运算符。
OutRas = Con(Sin(InRas1) > .5, 10, 100) OutRas2 = Con((InRas1 + InRas2) > 10, 100, 5) OutRas3 = Con(InRas1 > 5, Cos(InRas1), Sin(InRas1))
- 可以在一个条件函数工具中嵌套另一个条件函数工具。
OutRas = Con(InRas1 > 23, 5, Con(InRas1 > 20, 12, Con((InRas1 > 2) & (InRas1 < 17), Sin(InRas1), 100)))
- 在条件语句中和对像元执行运算的表达式中可以使用多个栅格数据。
将多个栅格数据作为输入是可行的,因为在移动至下一个像元之前条件函数工具就已对各 x,y 像元位置进行了计算。 当输入多个栅格数据时,指定的运算符或工具将在多个栅格数据间以逐个像元的方式执行处理。OutRas = Con(InRas1 + InRas2 > 7, Sin(InRas1), Cos(InRas2)) OutRas2 = Con(InRas1 < 9, InRas1 * InRas2 + Tan(InRas3), Cos(InRas1))