【229】Raster Calculator

参考:分段函数进行复制,利用语句

参考:ArcGIS栅格计算器 - CSDN

参考:ArcGIS栅格计算器con条件函数使用

参考:ArcGIS栅格计算器 - 电脑玩物

参考:在栅格计算器中构建表达式(官方帮助)


("lyr" = 0) * 1 + ("lyr" > 0) * ("lyr" < 0.783) * (0.6508 - 0.3436 * log10("lyr")) + ("lyr" > 0.783 ) * 0

其中:* 表示赋值,+ 表示连接,个人理解

# 以下实现分段函数
# x<60, y=1
# 60<=x<=120, y=2
# x>120, y=3
("Countries" < 60) * 1 + ("Countries" >= 60) * ("Countries" <= 120) * 2 + ("Countries" > 120) * 3
("Countries" < 60) * 1 + (("Countries" >= 60) & ("Countries" <= 120)) * 2 + ("Countries" > 120) * 3

# 利用条件判断Con可以实现if...elseif...elseif...else的操作
# 只需要在FALSE的参数位置继续增加Con语句即可
Con("Countries" < 60, 1, Con(("Countries" >= 60) & ("Countries" <=120), 2, 3))

# 4个分段
Con("Countries" < 60, 1, Con(("Countries" >= 60) & ("Countries" <=120), 2, Con(("Countries" > 120) & ("Countries" < 180), 3, 4)))

  以下是可在栅格计算器工具中执行的“地图代数”表达式的若干示例。在这些表达式中,栅格图层名称被包含在引号内,例如 "dist"。 

# 以下形式实现将大于200的赋值为1,其他为0的操作
# 前面两个利用条件判断,若True=1
"elev" > 200
("elev" > 200)
Con("elev",1, 0, "Value > 200")
Con("elev > 200",1, 0)

# 也可以将两个图层进行合并计算
("pop" > 150) & ("dist" > 10)

# 进行复杂的公式运算
(("reclass_rd_dist" * 3) + ("reclass_landuse" * 2) + "reclass_elev") /6.0
("Band4" - "Band3") / Float("Band4" + "Band3")

# 以下两种形式均能实现将值大于20的赋值为2,其他为3的操作
Con("elev",2, 3, "Value > 20")
Con("elev > 20",2, 3)

# 将 Null 替换为 0
Con(IsNull("elev"),0, "elev")

# True对应两个图层象元相加,否则为99
Con(("landuse1" == 1) & ("landuse2" == 5), "landuse1" + "landuse2", 99)

Con(Raster('elev') != 0,'elev')

(Con('elev', 'elev', "", "elev_feet <> 0")) + Raster("tree_height")

Con("inRas" < 45,1, Con(("inRas" >= 45) & ("inRas" < 47),2, Con(("inRas" >= 47)&("inRas" < 49),3, Con("inRas" >= 49,4))))

相关函数说明:

序号 类名称  

功能说明

  语法 & 举例
01 sa.Con  

====<<<< Description >>>>====

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

====<<<< Syntax >>>>====

sa.Con (in_conditional_raster, in_true_raster_or_constant, {in_false_raster_or_constant}, {where_clause})
----------------------------------------------------------------------------------

====<<<< Parameters >>>>====

◈  in_conditional_raster:表示所需条件结果为真或假的输入栅格。
◈  in_true_raster_or_constant条件为真时,其值作为输出像元值的输入。
◈  in_false_raster_or_constant:条件为假时,其值作为输出像元值的输入。
◈  where_clause:决定输入像元为真或假的逻辑表达式。表达式遵循 SQL 表达式的一般格式。where_clause 的一个示例为 "VALUE > 100"。

   
# 直接将结果添加到 ArcMap,名称为 outCon
>>> outCon = arcpy.sa.Con("rastercalc4", 2, 1, "VALUE < 100")
# 按照默认形式命名
>>> arcpy.sa.Con("rastercalc4", 42, 1, "VALUE < 100")
 02 sa.Pick  

====<<<< Description >>>>====

位置栅格数据的值用于确定要从输入栅格列表中的哪一个栅格获取输出像元值。
----------------------------------------------------------------------------------

====<<<< Syntax >>>>====

sa.Pick (in_position_raster, in_rasters_or_constants)
----------------------------------------------------------------------------------

====<<<< Parameters >>>>====

◈  in_position_raster:定义要用于输出值的栅格位置的输入栅格。
◈  in_rasters_or_constants将从中选择输出值的输入的列表。

   
# 按照一行一行计算位置
# InRas1 的第1个象元是1,因此获取列表中第1个栅格的第1个象元1
# InRas1 的第4个象元是2,因此获取列表中第2个栅格的第4个象元NoData
# InRas1 的第9个象元是NoData,结果为NoData
# InRas1 的第12个象元是3,已经超出列表长度,象元为NoData
OutRas = Pick(InRas1, [InRas2, InRas3])
           
原文地址:https://www.cnblogs.com/alex-bn-lee/p/5968979.html