大话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代码 首先是加法功能的实现 ...
随机推荐
- i3s 一种开源的三维地理数据规范 简单解读
i3s,esri主推到ogc的一种三维开源GIS数据标准. 版权声明:原创.博客园/B站/小专栏/知乎/CSDN @秋意正寒 转载请标注原地址并声明转载: https://www.cnblogs.co ...
- 基于Saltstack、Artifactory打造传统模式下持续部署平台
一.持续部署 1. 现状 由于没有建立标准的持续部署流程,导致了版本管理混乱,制品管理混乱,上线持续时间长,上线测试覆盖不全面,业务流量上升后故障较多,排查复杂.运维.测试.开发人员每次版本迭代的时候 ...
- vue+bootstrap4+mybatis分页
先看效果 Springboot+Mybatis+Pagehelper分页具体实现略. Controller返回数据 @GetMapping("/findByPage") publi ...
- Oauth2的使用(第三方授权登录)
例子: 京东商城 ,微博 ,用户三者之间的关系 第一方:用户 第二方:京东商城 第三方:微博 用户不希望在京东商城上注册,可以授权微博使用微博上的用户信息进行登录京东商城. 授权流程: 地址一:授权页 ...
- 由Kaggle竞赛wiki文章流量预测引发的pandas内存优化过程分享
pandas内存优化分享 缘由 最近在做Kaggle上的wiki文章流量预测项目,这里由于个人电脑配置问题,我一直都是用的Kaggle的kernel,但是我们知道kernel的内存限制是16G,如下: ...
- PowerDesigner配置Oracle数据库反向工程
PowerDesigner配置Oracle数据库反向工程 作者:Jesai 贴吧:软件频道吧 1. 前言: PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与 ...
- Java入门 - 面向对象 - 05.封装
原文地址:http://www.work100.net/training/java-encapsulation.html 更多教程:光束云 - 免费课程 封装 序号 文内章节 视频 1 概述 2 封装 ...
- BigInteger的权限设计
通过储存菜单权限的一个字段(id自定义也是可以的) 1 将选中菜单树的id转换成字符数组的形式, 进行BigInteger对权限进行2的权的和计算 public static BigInteger s ...
- 聊一聊 MySQL 数据库中的那些锁
在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...
- robotframework,移动端(小程序)自动化,通过屏幕坐标点击对应按钮的方法
使用场景: 下图通过常规方法是定位不到“红色”这个按钮的 我们把鼠标放置上去,下图右侧会显示该点的坐标地址 然后使用click a point指令定位 click a point 64 743 dur ...