大话IDL编程之函数功能调用(envi_doit、ENVIRaster、ENVITask)
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)的更多相关文章
- 【C语言C++编程入门】程序的可读性和函数的调用!
一个简单程序的结构 你已经看过一个具体的例子,下面可以了解一些 C程序的基本规则了. 程序由一个或多个函数组成,其中一定有一个名为 main()的函数.函数的描述由函数头和函数体组成.函数头包括预处理 ...
- 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...
- Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)
原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...
- 转: ES6异步编程:Generator 函数的含义与用法
转: ES6异步编程:Generator 函数的含义与用法 异步编程对 JavaScript 语言太重要.JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可. 以前,异步编程 ...
- C语言博客作业—函数嵌套调用
一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 1.1.1设计思路 void sort(int a[],int n) { 定义整型循环变量i,中间变量temp,最小值min: 令m ...
- C&C++——C函数与C++函数相互调用问题
C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...
- [Python3] 034 函数式编程 匿名函数
目录 函数式编程 Functional Programming 1. 简介 2. 函数 3. 匿名函数 3.1 lambda 表达式也称"匿名函数" 3.2 lambda 表达式的 ...
- 栈编程和函数控制流: 从 continuation 与 CPS 讲到 call/cc 与协程
原标题:尾递归优化 快速排序优化 CPS 变换 call/cc setjmp/longjmp coroutine 协程 栈编程和控制流 讲解 本文为部分函数式编程的扩展及最近接触编程语言控制流的学习和 ...
- 【混合编程】C/C++调用Fortran的DLL
[混合编程]C/C++调用Fortran的DLL 以一个简单的加法器为例,介绍C/C++调用Fortran语言DLL的操作过程 一.Fortran操作 1.1 Fortran代码 首先是加法功能的实现 ...
随机推荐
- hexo零基础搭建博客系列(一)
关于其他搭建 [hexo4快速搭建博客(二)更换主题](https://blog.csdn.net/weixin_41800884/article/details/103750634)[hexo4快速 ...
- 005.kubernets之pods的资源限制和健康检查
一 POD的容器资源限制 1.1 限制内容 有两个参数 QoS Class: BestEffort,表示尽可能的满足使用,级别较低,但当资源不够时,会杀掉这个容器 resources: {}这里指定为 ...
- vue 路由模块化
第一. 在 router 文件夹下 新建个个模块的文件夹,存放对应的路由js文件 如图1: 第二.修改router文件夹下的index.js 如图2 三.在main.js 修改如下代码 图3
- 【转】JavaScript 3D图表
文章系本人原创,转载请保持完整性并注明出自<四火的唠叨> 在说3D图表以前,首先要明确两个概念,一个是数据的维度,一个是呈现数据载体的维度.对于数据的维度,一维的数据呈现,但是呈现的载体是 ...
- Yolo V3损失函数占个坑
https://blog.csdn.net/weixin_43384257/article/details/100974776目前来看讲的最清楚的博客 https://zhuanlan.zhihu.c ...
- 一些常用查询SQL语句以及显示格式
1.查询当前年.月.周相关时间 1.1.查询当前年份 SELECT TO_CHAR(SYSDATE,'YYYY') AS YEAR FROM DUAL--查询当前年份 SELECT TO_CHAR(S ...
- OA系统、ERP系统、CRM系统的区别和联系有哪些?企业该如何使用?
我们经常听到很多企业会花重金购买适合企业的ERP.OA和CRM系统,使得公司的管理运营更加高效有序,节省公司运营成本,带来更大的经济效益,但实际上很多人员都不太理解他们之间的区别和联系是什么,到底该如 ...
- .net Core 2.*使用autofac注入
创建项目 1.创建一个.net core 项目 2.创建一个类库 2.1创建interface文件夹 2.2创建Service文件夹 好了给大家看项目目录 对的.我创建了一个IUserService和 ...
- 美食家App开发日记1
前期一直在看第一行代码Android,这本书感觉讲基础讲得特别细致. 百看不如一试. 因为刚刚接触Android,没办法做到想写什么功能就直接一下写好,只能从最开始基础的控件使用开始练习. 所以一直在 ...
- SpringBoot简单实现登录功能
登陆 开发期间模板引擎页面修改以后,要实时生效 1).禁用模板引擎的缓存 # 禁用缓存 spring.thymeleaf.cache=false 2).页面修改完成以后ctrl+f9:重新编译: 登陆 ...