ArcGIS大师之路500技---031栅格计算器


文章目录

  • 前言
  • 一、基本概念
  • 二、常用函数
    • [2.1 数学函数](#2.1 数学函数)
    • [2.2 统计函数](#2.2 统计函数)
    • [2.3 条件函数](#2.3 条件函数)
    • [2.4 逻辑函数](#2.4 逻辑函数)
    • [2.5 重分类函数](#2.5 重分类函数)
    • [2.6 表面分析函数](#2.6 表面分析函数)
    • [2.7 距离函数](#2.7 距离函数)
    • [2.8 水文分析函数](#2.8 水文分析函数)
    • [2.9 插值函数](#2.9 插值函数)
  • 三、最佳实践建议
  • 总结

前言

ArcGIS栅格计算器(Raster Calculator)是空间分析工具箱中的强大工具,用于对栅格数据进行数学运算和逻辑分析。


一、基本概念

  1. 作用
    执行栅格数据的数学运算(加、减、乘、除等)
    进行条件判断和逻辑运算
    多个栅格数据的叠加分析
    地图代数表达式计算
  2. 访问方式
    ArcMap: 空间分析工具 → 地图代数 → 栅格计算器
    : 通过arcpy.sa.RasterCalculator()调用
  3. 栅格引用方式
    直接双击图层列表中的栅格名称
    手动输入栅格名称(需加引号)
    使用完整路径:"C:/data/dem.tif"

二、常用函数

2.1 数学函数

  1. 基本数学运算
python 复制代码
# 绝对值
Abs("temperature_change")
#平方根
Sqrt("area")

#幂运算
Power("radius", 2)  # 半径的平方
Square("distance")  # 平方

#对数
Log("population")    # 自然对数
Log10("light_value") # 以10为底的对数
Exp("growth_rate")   # 指数函数

2 三角函数

python 复制代码
#角度转弧度
("angle_degree" * 3.1415926535) / 180

#三角函数计算
Sin("slope_radians")    # 正弦
Cos("aspect_radians")   # 余弦
Tan("angle_radians")    # 正切

#反三角函数
ASin("value")  # 反正弦
ACos("value")  # 反余弦
ATan("value")  # 反正切
实例:计算日照强度


 假设slope为坡度,aspect为坡向,latitude为纬度
slope_rad = ("slope" * 3.14159) / 180
aspect_rad = ("aspect" * 3.14159) / 180
lat_rad = (30 * 3.14159) / 180  # 北纬30度

#简化的日照强度计算
solar_radiation = Cos(slope_rad) * Cos(lat_rad) + Sin(slope_rad) * Sin(lat_rad) * Cos(aspect_rad)

2.2 统计函数

  1. 局部统计
python 复制代码
#邻域统计
FocalStatistics("elevation", NbrRectangle(3, 3), "MEAN")  # 3x3窗口均值
FocalStatistics("rainfall", NbrCircle(5, "CELL"), "MAX")  # 5像元半径最大值

#块统计
BlockStatistics("ndvi", NbrRectangle(10, 10), "MEAN")  # 10x10块统计
  1. 区域统计
python 复制代码
#分区统计
ZonalStatistics("watershed", "VALUE", "slope", "MEAN")  # 流域平均坡度
ZonalStatistics("landuse", "VALUE", "temperature", "RANGE")  # 土地利用类型内温度范围

2.3 条件函数

  1. Con函数(最常用)
python 复制代码
#基本语法
Con(condition, true_value, false_value)
Con(condition, true_value, false_value, where_clause)

#简单重分类
Con("elevation" > 1000, 1, 0)  # 高于1000米为1,否则为0

#多条件重分类
Con("landuse" == 1, "耕地",
    Con("landuse" == 2, "林地",
        Con("landuse" == 3, "水域", "其他")))
  1. Pick函数
python 复制代码
#根据位置索引选择值
Pick("index_raster", ["raster1", "raster2", "raster3"])

#实例:根据月份选择温度数据
month = "month_index"  # 值从1到12
temperature = Pick(month, 
    ["jan_temp", "feb_temp", "mar_temp", "apr_temp", "may_temp", "jun_temp",
     "jul_temp", "aug_temp", "sep_temp", "oct_temp", "nov_temp", "dec_temp"])

2.4 逻辑函数

  1. 比较运算
python 复制代码
#等于
"landuse" == 1

# 不等于
"slope" != 0

# 范围判断
("temperature" >= 10) & ("temperature" <= 30)

# 多个条件组合
("soil_type" == 3) & ("slope" < 15) & ("aspect" > 90) & ("aspect" < 270)
  1. 布尔运算
python 复制代码
# 与运算
("rainfall" > 1000) & ("temperature" > 15)

# 或运算
("elevation" < 50) | ("distance_sea" < 10)

# 非运算
~("protected_area" == 1)  # 非保护区

# 异或运算
("urban" == 1) ^ ("industrial" == 1)  # 城市或工业区,但不是两者都是

2.5 重分类函数

  1. Reclassify函数
python 复制代码
# 直接重分类(在ArcGIS Pro中)
Reclassify("slope", 
    RemapRange([[0,5,1], [5,15,2], [15,25,3], [25,90,4]]))

# 使用栅格计算器实现类似功能
slope_class = Con("slope" <= 5, 1,
    Con("slope" <= 15, 2,
        Con("slope" <= 25, 3, 4)))
  1. 自定义重分类
python 复制代码
# 连续值离散化
temperature_class = Int(("temperature" + 10) / 5)  # 每5度一个等级

# 归一化到0-1范围
normalized = ("value" - FocalStatistics("value", NbrRectangle(100,100), "MINIMUM")) / 
             (FocalStatistics("value", NbrRectangle(100,100), "MAXIMUM") - 
              FocalStatistics("value", NbrRectangle(100,100), "MINIMUM"))

2.6 表面分析函数

  1. 地形分析
python 复制代码
# 坡度计算(需要Spatial Analyst扩展)
Slope("dem", "DEGREE")  # 度为单位
Slope("dem", "PERCENT_RISE")  # 百分比坡度

# 坡向计算
Aspect("dem")

# 曲率计算
Curvature("dem")

2.7 距离函数

  1. 欧氏距离
python 复制代码
# 到最近道路的距离
EucDistance("roads")

# 成本距离
CostDistance("source", "cost_raster")

# 成本路径
CostPath("destination", "cost_distance", "backlink")

2.8 水文分析函数

  1. 基本水文分析
python 复制代码
# 流向计算
flow_dir = FlowDirection("dem", "NORMAL")

# 汇流累积量
flow_acc = FlowAccumulation(flow_dir)

# 盆地(流域)划分
basin = Basin(flow_dir)

# 水流长度
flow_length = FlowLength(flow_dir, "DOWNSTREAM")

2.9 插值函数

  1. 空间插值
python 复制代码
# IDW反距离权重插值
Idw("rain_gauges", "RAINFALL", 2000, 2)

# 克里金插值
Kriging("temperature_stations", "TEMP", "Spherical")

# 样条函数插值
Spline("elevation_points", "ELEVATION", "REGULARIZED")

三、最佳实践建议

表达式测试: 先在小型测试区域验证表达式

文档记录: 保存计算表达式和参数设置

中间结果: 复杂计算时保存中间结果

内存管理: 大文件计算时注意内存使用

验证检查: 使用统计工具验证计算结果


总结

ArcGIS栅格计算器是地理空间分析的核心工具,通过灵活的地图代数表达式,可以完成从简单数学运算到复杂空间模型的各类分析任务。掌握其语法规则和应用技巧,能显著提高GIS空间分析工作的效率和精度。

相关推荐
hdsoft_huge5 小时前
在天地图中使用不同格式高效加载 PostGIS 的方案
arcgis·postgresql·数据可视化
智航GIS6 小时前
ArcGIS大师之路500技---030栅格数据的镶嵌与裁切
arcgis
Q一件事6 小时前
ArcGIS中的字段类型
arcgis
天问一1 天前
前端引用printJS打印
前端·arcgis
破z晓4 天前
若依(vue版)集成ArcGIS
前端·vue.js·arcgis
杨超越luckly5 天前
HTML应用指南:利用GET请求获取全国瑞思教育门店位置信息
前端·python·arcgis·html·门店数据
网上邻居YY5 天前
城市不透水面边界提取(arcgis渔网方法)
arcgis
树谷-胡老师6 天前
全球-地上与地下生物量碳密度-栅格数据(300m/tif/2010年)
arcgis
杨超越luckly6 天前
HTML应用指南:利用GET请求获取全国新东方门店位置信息
前端·数据库·arcgis·html·门店数据