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的文件保存方式
    outputRaster = TASK.OUTPUT_RASTER
    outputRaster.export, 'C:/a.dat', 'envi'

    一般来说,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)的更多相关文章

  1. 【C语言C++编程入门】程序的可读性和函数的调用!

    一个简单程序的结构 你已经看过一个具体的例子,下面可以了解一些 C程序的基本规则了. 程序由一个或多个函数组成,其中一定有一个名为 main()的函数.函数的描述由函数头和函数体组成.函数头包括预处理 ...

  2. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  3. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

  4. 转: ES6异步编程:Generator 函数的含义与用法

    转: ES6异步编程:Generator 函数的含义与用法 异步编程对 JavaScript 语言太重要.JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可. 以前,异步编程 ...

  5. C语言博客作业—函数嵌套调用

    一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 1.1.1设计思路 void sort(int a[],int n) { 定义整型循环变量i,中间变量temp,最小值min: 令m ...

  6. C&C++——C函数与C++函数相互调用问题

    C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...

  7. [Python3] 034 函数式编程 匿名函数

    目录 函数式编程 Functional Programming 1. 简介 2. 函数 3. 匿名函数 3.1 lambda 表达式也称"匿名函数" 3.2 lambda 表达式的 ...

  8. 栈编程和函数控制流: 从 continuation 与 CPS 讲到 call/cc 与协程

    原标题:尾递归优化 快速排序优化 CPS 变换 call/cc setjmp/longjmp coroutine 协程 栈编程和控制流 讲解 本文为部分函数式编程的扩展及最近接触编程语言控制流的学习和 ...

  9. 【混合编程】C/C++调用Fortran的DLL

    [混合编程]C/C++调用Fortran的DLL 以一个简单的加法器为例,介绍C/C++调用Fortran语言DLL的操作过程 一.Fortran操作 1.1 Fortran代码 首先是加法功能的实现 ...

随机推荐

  1. C# 微信h5支付

    相关文档  https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1 需要准备 公众号ID.商户号.商家私钥 1.登 ...

  2. 使用WebUploader上传HTML文件并读取文件

    需求: 前端需要上传HTML文件并识别里面有多少个特殊标签并录入到数据库. 思路: 使用WebUploader上传文件,然后使用FileReader接口和DOMParser识别HTML中的特殊标签 资 ...

  3. 【转】提升你的Java应用性能:改善数据处理

    提升你的Java应用性能:改善数据处理 作者:贾小骏  发布于07月26日 10:17 许多应用程序在压力测试阶段或在生产环境中都会遇到性能问题.如果我们看一下性能问题背后的原因,会发现很多是由数据处 ...

  4. Greedy Gift Givers 贪婪的送礼者 USACO 模拟

    1002: 1.1.2 Greedy Gift Givers 贪婪的送礼者 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 9[提交] [状态] [讨论版] [命题人:外部导入 ...

  5. String.valueOf(null)

    public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); ...

  6. Governing sand 贪心

    题目链接:https://ac.nowcoder.com/acm/contest/887/C 题目描述 The Wow village is often hit by wind and sand,th ...

  7. 研究僧丨Window实用利器分享

    本人CS在读小硕,平时工作环境主要是win10加ubuntu,下面推荐一些我用过且觉得不错的应用. PS:我列举的应用基本被下面的网站收录,大家不妨去里面淘淘看. Windows 绝妙项目 Aweso ...

  8. springmvc 简化Javaweb 简单应用

    第一步 : 导入外部jar包,放在如图目录下 第二步:简单配置web.xml 文件 <?xml version="1.0" encoding="UTF-8" ...

  9. java小心机(4)| 继承与组合的爱恨情仇

    在java中,有两种主要复用代码的方法:继承和组合. 继承,是OOP的一大特性,想必大家都非常熟悉了;组合,其实也很常见,只是不知道它的名字罢了. 继承 子类拥有父类的基本特性,需使用extend关键 ...

  10. java重点知识点整理

    隔壁班的帅哥给我的 1.1简述JAVA的语言特点 a语法简单,功能强大 b分布式与安全性 c与平台无关 d多线程 1.2什么是Java虚拟机?它包括哪几个部分? 解: Java 虚拟机 (JVM ) ...