码迷,mamicode.com
首页 > 其他好文 > 详细

大话IDL编程之函数功能调用(envi_doit、ENVIRaster、ENVITask)

时间:2020-02-01 19:49:30      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:code   个数   打开   creat   nbsp   free   lte   sel   int   

  2020年2月1日。好长时间没更新博客,还真有点不习惯。受新型冠性病毒的影响,平时街上熙熙攘攘的人流了无踪影,2020的春节竟然来的如此冷清。为响应“呆在家里就是做贡献的号召”,在家一宅就是十多天。闲来无事,就总结一下ENVI-IDL二次开发的学习经验吧。

  ENVI二次开发主要有两种编程方式:IDL二次开发、ENVI-IDL交互式开发。

  其中,IDL二次开发方式较为繁琐,但是也的确算是基本功,需要熟练掌握。而ENVI-IDL交互开发的方式简洁高效,是现在的主流开发方式。

  其中,对于某些功能函数,ENVI已经给出了新的调用方法。即envi_doit、ENVIRaster虚拟栅格、ENVITask这三种方法。其中虚拟栅格的方法将数据在内存中运行,运行完之后释放。而

ENVITASK也同样简洁高效、易懂。

  •   首先讲ENVITask的实现方式(这里以ENVIRadiometricCalibration为例)
    e = ENVI()
    file = a.dat
    raster = e.OpenRaster(file)
    Task = ENVITask(RadiometricCalibration)
    Task.INPUT_RASTER = raster
    Task.OUTPUT_TYPE = Double
    Task.OUTPUT_RASTER_UI = C:/a.dat    ;设置输出路径
    Task.Execute

    一般来说,ENVITask方法只要设置好该方法的输入输出,就可以得到结果,较为方便。此外,对于自定义task, 在有.pro文件后,可以编写.task文件用来调用。。。。。。。。。。。ui = e.UI   r = ui.SelectTaskParameters,添加该代码显示参数窗口。

  •      其次讲ENVIRaster的实现方式(ENVIRadiometricCalibrationTask)
    e = ENVI()
    file = LC80410302013213LGN00_MTL.txt
    raster = e.OpenRaster(file)
    OLIBands = raster[0]    ;Landsat8数据被存储在5-element数组中,第一个数组阵列是波段数据
    refRaster = ENVICalibrateRaster(OLIBands,CALIBRATION = Top-of-Atmophere Reflectance)
    refRaster.export,‘c://new.dat‘ ;data.export输出文件并保存 e.DATA.add, refRaster ;数据添加到交互界面 view
    = e.getview() ;创建视图 layer = view.createlayer(refRaster) ;添加图层
  •      envi_doit方法/IDL方法
    fn = a.dat
    envi_open_file, fn, r_fid=fid
    envi_file_query, fid, ns=ns, nl=nl, nb=nb, dims=dims,pos=pos
    map_info = envi_get_map_info(fid=fid)
    
    ;接下来有两种方法, envi_doit和普通的IDL方法
    pos=[0,1,2]
    envi_doit,envi_avhrr_calibrate_doit,dims=dims,fid=fid,pos=pos,out_name=b.dat
    
    ;普通的IDL方法
    fn_calib = dialog_pickfile(filter=*.txt, title=calibrate)
    openr,lun,fn,fn_calib,/get_lun   ;openr 打开txt文件
    data=fltarr(2,6)
    readf,lun,data  ;readf 读取到data
    free_lun, lun
    gain = data[0,*]
    bais = data[1,*]
    
    L = fltarr(ns,nl,nb)
    for i=0,nb-1 do begin
        data_band=envi_get_data(fid=fid,dims=dims,pos=i)   
        ;envi_get_data 读取数据
        L[*,*,i]=gain[i]*data_band+bias[i]
    endfor
    
    outfile=new.dat
    envi_write_envi_file,L,out_name=outfile,ns=ns,nl=nl,nb=nb,$ data_type=4,interleave=interleave,offset=offset,bnames=bnames,map_info=map_info
    #保存文件 envi_write_envi_file

     如有错误,还请指摘。

大话IDL编程之函数功能调用(envi_doit、ENVIRaster、ENVITask)

标签:code   个数   打开   creat   nbsp   free   lte   sel   int   

原文地址:https://www.cnblogs.com/ljwgis/p/12249504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!