使用“条件函数”的条件求值
根据像元在指定的条件语句中被判定为“真”还是“假”,条件函数工具允许您控制每个像元的输出。
如果像元被判定为“真”,它将获得一类值;如果像元被判定为“假”,它将获得另一类值。当像元被判定为“真”时,它所获得的输出值由输入条件为真时所取的栅格数据或常数值指定。当像元被判定为“假”时,它所获得的输出值由输入条件为假时所取的栅格数据或常数值指定。
从概念上讲,执行期间,条件函数工具会访问各像元的位置并根据像元的值和条件语句来确定该像元被判定为“真”还是“假”。如果像元被判定为“真”,则该像元位置的输出值由条件为真的输入进行定义。如果像元被判定为“假”,则该像元位置的输出值由条件为假的输入进行定义。
在地理处理环境中,确定像元位置处是“真”还是“假”有两种方法:通过输入栅格数据确定,或通过应用有可选的输入表达式的输入栅格数据确定。如果只使用输入栅格数据,则输入栅格数据中的所有非零值都被视为“真”,所有零值被视为“假”。指定为 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)
- 如果不为“假”表达式指定任何值或表达式:
OutRas = Con(InRas < 15, 10)
- 可以使用任意有效表达式来代替 <true_expression> 和 <false_expression> 参数值。
OutRas = Con(InRas1 > 5, Sin(InRas1), Cos(InRas1))
- 条件函数工具可以使用多条件语句,但是,如果条件判定结果为“真”,每个条件语句必须都有能够指定输出像元值的值或表达式 <true_expression>。如果条件判定的结果都不为真,则将使用可选值或 {false_expression} 表达式。
OutRas = Con(InRas1 < 5, Sin(InRas1), Con(InRas1 < 20, Cos(InRas1), Con(InRas1 > 50, 100, 0)))
- 在条件函数工具的条件表达式中可以使用多种条件。
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)))
- 在条件语句中和对像元执行运算的表达式中可以使用多个栅格数据。
OutRas = Con(InRas1 + InRas2 > 7, Sin(InRas1), Cos(InRas2)) OutRas2 = Con(InRas1 < 9, InRas1 * InRas2 + Tan(InRas3), Cos(InRas1))