赞
踩
#!/usr/bin/python # -*- coding: UTF-8 -*- import arcpy import os import time rasters = arcpy.GetParameterAsText(0) expression = arcpy.GetParameterAsText(1) # expression including {A} out_path = arcpy.GetParameterAsText(2) prefix = arcpy.GetParameterAsText(3) rasters = rasters.split(";") nums = len(rasters) num = 1 for raster in rasters: raster_path = raster.replace("'","") raster_dir,raster_name = os.path.split(raster_path) arcpy.env.workspace = raster_dir out_raster = os.path.join(out_path, prefix + raster_name) exp = expression.replace('{A}', r'"{0}"'.format(raster_name)) arcpy.AddMessage(exp) if not os.path.exists(out_raster): try: arcpy.gp.RasterCalculator_sa(exp, out_raster) arcpy.AddMessage("%d/%d | %s completed" % (num, nums, out_raster)) except Exception as err: arcpy.AddMessage("%d/%d | %s errored, %s" % (num, nums, out_raster, err)) else: arcpy.AddMessage("%d/%d | %s already exists" % (num, nums, out_raster)) num = num + 1
Parameter | Explanation | Data type |
---|---|---|
rasters | 待执行栅格计算器的多个栅格文件 | Raster Dataset |
expression | 栅格计算器工具要执行的代数表达式。该表达式需要满足栅格计算器工具中代数表达式的基本语法,并且包含字符串"{A}“,字符串”{A}"代表输入栅格在代数表达式中的位置。 | String |
out_path | 输出栅格文件的文件夹 | Folder |
prefix | 输出栅格文件的文件名前缀,该栅格的文件名为"prefix_<旧文件名>.tif",该参数默认为"cal_" | String |
关于参数expression,提供了一些常用的示例
1.加 {A} + 10 2.减 {A} - 273.15 3.乘 {A} * 0.0001 4.除 {A} / 10000 5.四则运算 ({A} * 3 + 4)/5 6.条件函数-计算掩膜 Con({A} > 0,1,0}) 7.条件函数-计算植被覆盖度 Con({A}<0.1,0,Con({A}>=0.8,1,({A}-0.1)/0.7)) 8.条件函数-固定值填充空值 Con(IsNull({A}), 0, {A}) 9.条件函数-插值填充空值 Con(IsNull({A}), FocalStatistics({A}, NbrRectangle(5,5, "CELL"), "MEAN"), {A}) 10.设为空-将满足条件的栅格赋值为空值 SetNull({A}<0,{A})
通过修改参数expression,对栅格批量执行某一代数表达式。
{A} - 273.15
假设我们根据NDVI的累计频率分布,已经确定了像元二分模型中的两个阈值分别为0.1、0.85。则可以通过将该工具中的expression设置为:
Con({A}<0.1,0,Con({A}>=0.85,1,({A}-0.1)/0.75))
Con(IsNull({A}), 0, {A})
还可以选择根据空白区域周围的有效像元插值进行填充,表达式可以参考
Con(IsNull({A}), FocalStatistics({A}, NbrRectangle(5,5, "CELL"), "MEAN"), {A})
关于上述表达式的说明,可以参考
缺失像元处的值就用以其为中心的5*5的矩形窗口内所有的有效像元的值平均后得到 FOCALMEAN中的长方形的尺寸可以被编辑以适应数据的需求。编辑"5,5"的值的大小可以改变长方形的尺寸。可能需要改成更大或者更小,这取决于数据。 原理是利用邻域均值代替空缺值。 可用的不同类型的邻域: NbrAnnulus,NbrCircle,NbrRectangle,NbrWedge, NbrIrregular,和NbrWeight。默认邻域是正方形NbrRectangle,其宽度和高度为3个单元格。 要计算的统计类型: MEAN(平均值)—计算附近单元格的平均值(平均值)。 MAJORITY —计算附近的单元格的多数(最常出现的值)。 MAXIMUM —计算附近的像元的最大值(最大值)。 MEDIAN —计算附近单元格的中位数。 MINIMUM —计算附近的像元的最小值(最小值)。 MINORITY-计算邻域中的单元格的少数(最少出现的值)。 RANGE(范围)—计算附近单元格的范围(最大值与最小值之间的差)。 STD —计算附近单元格的标准差。 SUM —计算附近单元格的总和(所有值的总和)。 VARIETY(变异度)—计算附近单元格的变异度(唯一值的数量)。 默认的统计类型是MEAN。 如果输入栅格为浮点,则只有MEAN,MAXIMUM,MINIMUM,RANGE,STD和SUM统计类型可用。
举个例子,对于上文使用的存在缺失区域的NPP栅格,使用相邻有效像元的值进行填充
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。