使用“条件函数”的条件求值

根据像元在指定的条件语句中被判定为“真”还是“假”,条件函数工具允许您控制每个像元的输出。

如果像元被判定为“真”,它将获得一类值;如果像元被判定为“假”,它将获得另一类值。当像元被判定为“真”时,它所获得的输出值由输入条件为真时所取的栅格数据或常数值指定。当像元被判定为“假”时,它所获得的输出值由输入条件为假时所取的栅格数据或常数值指定。

从概念上讲,执行期间,条件函数工具会访问各像元的位置并根据像元的值和条件语句来确定该像元被判定为“真”还是“假”。如果像元被判定为“真”,则该像元位置的输出值由条件为真的输入进行定义。如果像元被判定为“假”,则该像元位置的输出值由条件为假的输入进行定义。

在地理处理环境中,确定像元位置处是“真”还是“假”有两种方法:通过输入栅格数据确定,或通过应用有可选的输入表达式的输入栅格数据确定。如果只使用输入栅格数据,则输入栅格数据中的所有非零值都被视为“真”,所有零值被视为“假”。指定为 NoData 的像元将获得 NoData 作为输出。NoData 并不等同于“假”。

您可以使用多种“空间分析”工具创建条件输入栅格数据。特别是可以使用“数学”工具箱中的逻辑工具,其中的条件判定工具非常有帮助。

在地图代数中使用条件函数工具

要在地图代数的栅格数据集中执行条件判定,请将栅格数据集作为条件栅格输入到条件函数工具中。输入一个“真”栅格以提供当条件判定为“真”时的返回值。输入一个“假”栅格以提供当条件判定为“假”时的返回值。where 子句参数定义了根据输入条件栅格数据进行判定的表达式。

示例

例如,如果您想基于像元的坡度(由输入条件栅格数据确定),用值 10(指定为真常量)来标识好的构造,而用值 1(指定为假常量)标识不适宜的构造,并且认定小于 15% 的坡度是好的构造,那么应输入的表达式为“value < 15”。如果一个像元的坡度小于 15%,那么它将获得为条件真指定的值(此例中为 10);否则,它将获得为条件假指定的值(此例中为 1)。

OutRas = Con(SlopeRas, 10, 1, "VALUE < 15")

在地图代数中使用条件函数工具创建复杂表达式

在“地图代数”中,比起使用简单的逻辑条件,使用表达式可以实现更多功能。例如,通过使用一个复杂的表达式,您可以将几个单独的表达式嵌套其中,指定多个栅格,或者使用其他工具和运算符。

任何可以得出栅格数据的有效“地图代数”表达式都能用作输入条件、“真”栅格输入或“假”栅格输入的参数。

请注意,如果输入条件栅格表达式用在复杂表达式中,那么应删除 <where_clause> 参数。在这种情况下,条件函数工具的语法具有如下所示的一般形式:

 Con(in_conditional_raster, true_raster, {false_raster})
该情况下删除 <where_clause> 参数是因为条件栅格数据由地图代数表达式提供。地图代数表达式会返回一个栅格数据集,例如,如果执行的是逻辑运算,则会返回一个值为 0 和 1 的栅格数据集。

示例

  • 以下是在条件函数工具中使用复杂表达式的示例:
    OutRas = Con(InRas < 15, 10, 1)
    
    在以上表达式中,如果 InRas 中的像元值小于 15,则输出栅格中该像元位置将被赋予值 10(真);否则,如果像元值大于或等于 15,则输出栅格中该像元位置将被赋予值 1(假)。
  • 如果不为“假”表达式指定任何值或表达式:
    OutRas = Con(InRas < 15, 10)
    
    则除了值为 15 或大于 15 的像元被赋予 NoData 之外,其他输出结果将与上例中的输出结果相同。
  • 可以使用任意有效表达式来代替 <true_expression> 和 <false_expression> 参数值。
    OutRas = Con(InRas1 > 5, Sin(InRas1), Cos(InRas1))
    
    以上表达式将计算所有大于 5 的值的正弦和所有小于或等于 5 的值的余弦,并将结果发送至 OutRas 中。
  • 条件函数工具可以使用多条件语句,但是,如果条件判定结果为“真”,每个条件语句必须都有能够指定输出像元值的值或表达式 <true_expression>。如果条件判定的结果都不为真,则将使用可选值或 {false_expression} 表达式。
    OutRas = Con(InRas1 < 5, Sin(InRas1), Con(InRas1 < 20, Cos(InRas1), Con(InRas1 > 50, 100, 0)))
    
    以上表达式将为小于 5 的值计算正弦,为大于等于 5 但小于 20 的值计算余弦,而大于等于 20 但小于等于 50 的像元值将被赋予值 0,大于 50 的像元值将被赋予值 100。
  • 条件函数工具的条件表达式中可以使用多种条件。
    OutRas = Con((InRas1 > 5) & (InRas1 < 10), 5, 100)
    
    在以上表达式中,如果 InRas1 中的输入栅格数据大于 5 且小于 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)))
    
  • 在条件语句中和对像元执行运算的表达式中可以使用多个栅格数据。
    OutRas = Con(InRas1 + InRas2 > 7, Sin(InRas1), Cos(InRas2))
    OutRas2 = Con(InRas1 < 9, InRas1 * InRas2 + Tan(InRas3), Cos(InRas1))
    
    将多个栅格数据作为输入是可行的,因为在移动至下一个像元之前条件函数工具就已对各 x,y 像元位置进行了计算。当输入多个栅格数据时,指定的运算符或工具将在多个栅格数据间以逐个像元的方式执行处理。

相关主题

5/10/2014