数据库教程:IDL批量计算栅格数据平均值

遥感数据处理系列一些项目及科研中遇到的小需求,一方面记录自己的学习历程,另一方面帮助大家学习。ArcPy批量计算栅格数据平均值GLDAS数据下载及处理(NC转TIF)ArcGIS批量裁剪栅格数据ArcPy批量栅格重采样ArcPy批量裁剪栅格数据IDL多进程批处理遥感数据ArcPy批量拼接栅格数据文章目录遥感数据处理系列前言一、栅格数据平均值1. 原理简介2. 代码总结前言在使用ArcGIS的开发包函数进行栅格数据平均值计算时发现,在结果影像出现了好多的异常值?经过查看发现是因为


遥感数据处理系列

一些项目及科研中遇到的小需求,一方面记录自己的学习历程,另一方面帮助大家学习。

ArcPy批量计算栅格数据平均值
GLDAS数据下载及处理(NC转TIF)
ArcGIS批量裁剪栅格数据
ArcPy批量栅格重采样
ArcPy批量裁剪栅格数据

IDL多进程批处理遥感数据
ArcPy批量拼接栅格数据


文章目录

  • 遥感数据处理系列
  • 前言
  • 一、栅格数据平均值
    • 1. 原理简介
    • 2. 代码
  • 总结

前言

在使用ArcGIS的开发包函数进行栅格数据平均值计算时发现,在结果影像出现了好多的异常值?经过查看发现是因为ArcGIS算法的问题,所以,用IDL写了下自己的栅格平均值计算逻辑。


一、栅格数据平均值

1. 原理简介

使用ArcGIS进行栅格数据平均值计算时,出现异常值的原因如下图所示:
IDL批量计算栅格数据平均值
那么问题来了:如果每个像元都有一个NoData出现过,那岂不是OutRas里面全部都是NoData了?
我脑海里的栅格数据平均值:对于N景影像,在(a,b)坐标处有 t 景影像存在有效像元,那么其平均值应该是多景影像在(a,b)坐标处DN值的累加 除以 t

2. 代码

文件组织架构:

输入:
一个含有若干栅格数据的文件夹 inws(本例为“.tif”格式)

代码实例:

pro Average_Batch    ;计算输入文件夹内的 所有栅格数据的 平均值   ;算整个文件夹的    compile_opt strictarr   COMPILE_OPT idl2    envi, /restore_base_save_files   envi_batch_init, log_file='batch.txt',/NO_STATUS_WINDOW    dir0='F:LE-daily-LMB2017'   ; 输入路径    out_dir='F:LMBLE-year'  ; 输出路径    files=file_search(dir0,'*.tif')    ; 读取文件信息。先获取个行列数   ENVI_OPEN_FILE, files[0], r_fid=fid,  /no_realize   ENVI_FILE_QUERY, fid,  nl=nl, ns=ns,dims=dims,nb=nb   mapinfo=envi_get_map_info(fid=fid)   file=ENVI_GET_DATA(fid=fid,dims=dims,pos=0)   low_row=N_elements(file[0,*]);获取行数   low_col=N_elements(file[*,0]);获取列数    Sum = make_array(low_col,low_row,value=0.0);存有效像元的累加值   count = make_array(low_col,low_row,value=0.0);存有效像元的出现次数   Average = make_array(low_col,low_row,value=0.0);存平均值    ; 遍历文件夹内的所有栅格数据   for i=0,n_elements(files)-1 do begin     ENVI_OPEN_FILE, files[i], r_fid=fid,  /no_realize     ENVI_FILE_QUERY, fid,  nl=nl, ns=ns,dims=dims,nb=nb     file=ENVI_GET_DATA(fid=fid,dims=dims,pos=0)      ; 单景影像的逻辑     for a=0,low_col-1 do begin;获取列数       for b=0,low_row-1 do begin;获取行数,应该是先列后行          if  file[a,b] GT  0 then begin    ;GE 大于等于运算符,左边大于右边则为真;GT 大于运算符;LE:小于等于运算符;LT:小于运算符           Sum[a,b] = Sum[a,b] + file[a,b]   ; 有效值累加,每个像元的           count[a,b] = count[a,b] + 1 ;累加次数计数器         endif        endfor     endfor    endfor      Average = Sum / count    outfile8 = out_dir + '' + strmid(file_basename(files[0]),0,25) + '.Average.tif'    ;16  25   ENVI_WRITE_ENVI_FILE , Average , r_fid=fid , map_info=mapinfo , out_name=outfile8  end 

上例可实现对输入路径文件夹下的所有栅格数据的平均栅格计算。

总结

ArcPy牛皮!毕业万岁!中期快乐!
批量计算平均栅格数据,接下来要继续探索下IDL语言,虽然它的语法有些…,同时,学习下python + GDAL,这一大杀器

需要了解更多数据库技术:IDL批量计算栅格数据平均值,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/795379.html

(0)
上一篇 2021年9月10日
下一篇 2021年9月10日

精彩推荐