条件函数 (空间分析)

摘要

可对输入栅格的每个输入像元执行 if/else 条件评估。

了解有关使用条件函数工具执行条件评估的详细信息

插图

条件函数图示
OutRas = Con(InRas1, 40, 30, "Value >= 2")

使用情况

  • 如果真栅格数据或可选假栅格数据为浮点型,则输出栅格数据也将为浮点型。 如果真表达式和可选假栅格都为整型,则输出栅格将为整型。

  • 如果输入条件栅格(Python 中的 in_conditional_raster)为单波段栅格,并且输入真栅格或常量值(Python 中的 in_true_raster_or_constant)栅格或可选输入假栅格或常量值(Python 中的 in_false_raster_or_constant)栅格为常量,则输出将为单波段栅格。

  • 如果所有输入都是多波段栅格,则输出将是多波段栅格。 如果真输入或可选的假输入为常量,则输出栅格也将是多波段的。 每个多波段输入中的波段数必须相同。

  • 此工具将使用来自其他输入的相应波段在条件栅格的每个波段上执行操作。 如果条件输入是多波段栅格,并且真或假栅格输入是常量,则该工具将使用多波段输入中每个波段的常量值执行操作。

  • 如果表达式的评估结果为非零,则视为真。

  • 如果未指定输入假栅格或常量值,则对于表达式中非真的像元,将被分配值 NoData。

  • 如果 NoData 不满足表达式,则像元不会接收输入条件为假时所取的栅格数据值;像元值仍是 NoData。

  • 表达式使用 SQL 查询。 有关创建查询的详细信息,请参阅以下主题:

  • 要在 Python 中使用 {where_clause},应以引号括起来。 例如,"Value > 5000”

    有关使用 Python 指定查询的详细信息,请参阅帮助。

  • 在 Python 中,您可避免使用 {where_clause},其通过将“地图代数”表达式用作 in_conditional_raster 来指定 Value 字段。

    例如,以下表达式:

    • Con("elev", 0, 1, "value > 1000")

    可以重写如下:

    • Con(Raster("elev") > 1000, 0, 1)

    有关详细信息,请参阅下列代码示例或在“地图代数”中查看构建复杂语句

  • 逻辑表达式的最大长度为 4,096 个字符。

  • 如果其中至少一个输入是有相同变量数的多维栅格数据,则该工具将对具有相同维度值的所有剖切片执行运算。 输出将是 CRF 格式的多维栅格。 输入中的变量必须至少具有一个常见维度和一个常见维度值以供此工具进行处理,否则将发生错误。

    如果任意两个输入为多维栅格并共享一个变量(但名称不同),则请在运行工具之前取消选中匹配多维变量地理处理环境(在 Python 中设置 arcpy.env.matchMultidimensionalVariable = False)。

    如果输入条件栅格值是多维栅格,而输入条件为真时所取的栅格数据或常量值输入条件为假时所取的栅格数据或常量值参数设置为常量值,则工具将使用常量值针对所有剖切片的所有变量执行运算,而输出将是多维栅格。

参数

标注说明数据类型
输入条件栅格

此输入栅格表示所需条件的 true 或 false 结果。

可为整型或浮点型。

Raster Layer
输入条件为真时所取的栅格数据或常量值

条件为 true 时,值将作为输出像元值的输入。

它可以是整型栅格、浮点型栅格或常量值。

Raster Layer; Constant
输入条件为假时所取的栅格数据或常量值
(可选)

条件为 false 时,值将作为输出像元值的输入。

它可以是整型栅格、浮点型栅格或常量值。

Raster Layer; Constant
表达式
(可选)

此逻辑表达式用于确定为 true 或 false 的输入像元。

Where 子句遵循 SQL 表达式的一般格式。 如果您单击编辑 SQL 模式按钮 SQL 查询,则可以直接输入,例如 VALUE > 100。 如果处于编辑子句模式 编辑子句 中,则可以通过单击添加子句模式按钮来开始构建表达式。

SQL Expression

返回值

标注说明数据类型
输出栅格

输出栅格。

Raster

Con(in_conditional_raster, in_true_raster_or_constant, {in_false_raster_or_constant}, {where_clause})
名称说明数据类型
in_conditional_raster

此输入栅格表示所需条件的 true 或 false 结果。

可为整型或浮点型。

Raster Layer
in_true_raster_or_constant

条件为 true 时,值将作为输出像元值的输入。

它可以是整型栅格、浮点型栅格或常量值。

Raster Layer; Constant
in_false_raster_or_constant
(可选)

条件为 false 时,值将作为输出像元值的输入。

它可以是整型栅格、浮点型栅格或常量值。

Raster Layer; Constant
where_clause
(可选)

此逻辑表达式用于确定为 true 或 false 的输入像元。

表达式遵循 SQL 表达式的一般格式。 where_clause 的示例为 "VALUE > 100"

SQL Expression

返回值

名称说明数据类型
out_raster

输出栅格。

Raster

代码示例

Con 示例 1(Python 窗口)

在此示例中,当输入条件栅格值大于 2000 时,输出将保留原始值;当条件不满足时,输出将为 NoData。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outCon = Con("elevation", "elevation", "", "VALUE > 2000")
outCon.save("C:/sapyexamples/output/outcon.img")

# Execute Con using a map algebra expression instead of a where clause
outCon2 = Con(Raster("elevation") > 2000, "elevation")
outCon2.save("C:/sapyexamples/output/outcon2")
Con 示例 2(Python 窗口)

在此示例中,除了 NoData 外,原始值将保留在输出中,NoData 将被替换为 0。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outCon = Con(IsNull("elevation"),0, "elevation")
outCon.save("C:/sapyexamples/output/outcon")
Con 示例 3(Python 窗口)

在此示例中,使用了两个不同的栅格创建条件栅格。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
inRaster1 = Raster("landuse")
inRaster2 = Raster("landuse2")
outCon = Con(((inRaster1 == 1) & (inRaster2 == 5)), inRaster1 + inRaster2, 99)
outCon.save("C:/sapyexamples/output/outcon")
Con 示例 4(Python 窗口)

在本例中,条件函数中使用了多个条件函数工具。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
inRas1 = Raster("inRaster")
outCon = Con(inRas1 < 45,1, Con((inRas1 >= 45) & (inRas1 < 47),2, Con((inRas1 >= 47) & (inRas1 < 49),3, Con(inRas1 >= 49,4))))
outCon.save("C:/sapyexamples/output/outcon")
Con 示例 5(独立脚本)

在此示例中,当输入条件栅格的值大于或等于 1500 时,输出值将为 1;当条件不满足时,输出值将为 0。

# Name: Con_Ex_02.py
# Description: Performs a conditional if/else evaluation 
#              on each cell of an input raster.
# Requirements: Spatial Analyst Extension

# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

# Set environment settings
env.workspace = "C:/sapyexamples/data"

# Set local variables
inRaster = Raster("elevation")
inTrueRaster = 1
inFalseConstant = 0
whereClause = "VALUE >= 1500"

# Execute Con
outCon = Con(inRaster, inTrueRaster, inFalseConstant, whereClause)

# Execute Con using a map algebra expression instead of a where clause
outCon2 = Con(inRaster >= 1500, inTrueRaster, inFalseConstant)

# Save the outputs 
outCon.save("C:/sapyexamples/output/outcon")
outCon2.save("C:/sapyexamples/output/outcon2")