IDL(ENVI/IDL) 简(jian)明(lou)教程:一、IDL基础

2023-05-16

    IDL是一门简单易用的(包括但不限于)科学计算和可视化语言,包含大量的函数,尤其是同ENVI结合集成了该软件的大量功能,因此在遥感图像批量处理上应用广泛。关于IDL(结合ENVI)的中文简明教程并不多见,但英文版却有不少,本文以几个英文资源为基础介绍。如果有一些编程基础又想短时间内(比如半天)了解IDL,并掌握简单的使用IDL调用ENVI函数进行批量处理的话,可以参考本系列文章。目前,该系列包括两篇,第一篇是IDL基础,第二篇是ENVI/IDL批处理入门。

一、IDL基础

先推荐两个简明IDL入门教程,功法不同,大家可以根据喜好选择。

一个是偏理论的概述语法(ChrisNorth, 2005):

A (Very) Quick Guide to IDL: Version 1.1

http://www.mpia.de/imprs-hd/documents/IDLGuide.pdf

一个是实例引导的教程(UCL 的P. Lewis等, 2007,遥感届的先驱)

http://www2.geog.ucl.ac.uk/~mdisney/teaching/unix/idl/idl.html

http://www2.geog.ucl.ac.uk/~mdisney/teaching/unix/idl/idl2.html

http://www2.geog.ucl.ac.uk/~mdisney/teaching/unix/idl/IDLLewispart3.html

进一步学习可以参考下面这几本书(googlesearch),其中6000页+的IDL Reference Guide对IDL语法和原生函数介绍很细致又有例子,是不错的查询参考手册:

Using IDL

IDL Reference Guide

Learning IDL & IDL Programming

Building Graphical User Interface in IDL

Building IDL Applications

http://fermi.jhuapl.edu/states/states.html

 

下面参考Chris North的教程简单展开下IDL的语法

1、结构(过程和函数)

IDL程序的独立单元是过程(procedure)或函数(function),两者定义的语法是:

PRO procedure name, parameter1, parameter2,. . . ,parametern,

keyword1=keyword1,. . . , keywordn=keywordn

FUNCTIONfunction name, parameter1,parameter2, . . . ,parametern,

keyword1=keyword1,. . . , keywordn=keywordn

过程的调用方式:

procedure name, parameters, keywords

         函数的调用方式:

Result=function name(parameters, keywords)

         Result是函数的返回结果,在程序里要有return。

         IDL的过程和函数参数(arguments)分为两类:位置参数和关键字参数(parameters and keywords),前者调用时顺序固定,通常用于必选参数,后者位置可变,通常用于可选参数。

PROCEDURE NAME, parameters, …, keyword=value,…

         2、简单语法

         1)变量

ü  变量名不能以数字开头;

ü  大小写不敏感;

ü  !开头的变量是系统变量;

ü  过程和函数不能使用非传递或未定义的变量(有点像废话)。

当变量名不是float时,可以通过赋近似的值进行定义。比如A=0代表整型,A=0L代表长整型,A=0.代表浮点型,A=0.d0代表双精度浮点,A=’’代表字符串。

2)块(Blocks)

IF. . .THEN和WHILE在使用时包含多行代码就形成典型的代码块,如果代码块中代码超过一行,需要使用Begin END包裹。

IF condition THEN Begin

. . . block of code

ENDIF ELSEIF other condition THEN Begin

. . .more code

ENDELSE

         单行的话可以简单写为:

IF condition THEN somethingELSE something else

         3)$和&

$是续行符,可以将较长的一句代码写在多行,比如有很多参数的时候。&是断行附,指示同一行的不同语句。

4)状态和循环语句

FOR integer=low,high DO expression

OR

FOR integer=low,high DO Begin

block of code

ENDFOR

 

WHILE condition DO expression

OR

WHILE condition DO Begin

block of code

ENDWHILE

 

REPEAT statement UNTIL condition

OR

REPEAT Begin

block of code

ENDREP UNTIL condition

         5)判断运算符

判断运算符包括:

EQ (equal to),

NE (not equal to),

LT (lessthan),

GT (greater than),

LE (less than or equal to),

GE (greater than orequal to),

AND,

OR,

NOT.

         6)矩阵操作

Array[i,j]可以访问矩阵的i行j列元素。Array[*,*]代表矩阵的所有元素。#是矩阵乘法运算符,不同于一般运算。矩阵操作函数,不指明行列的话代表所有元素。比如TOTAL(Array)对所有元素求和,TOTAL(Array[*,k] )对第k列求和。

7)数学运算符和函数

数学运算符:

= Assignment

+ Addition

- Subtraction

* Multiplication

/ Division

ˆ Exponentiation

++ Increment by1

-- Decrement by1

MOD Modulooperator

< Minimiseoperator

> Maximiseoperator

数学运算函数:

EXP, SQRT, ALOG,ALOG10, SIN,ASIN, SINH等

8)数据类型

9)文件读写

常用的有:

OPENR, unit,filename 以只读方式打开文件

OPENW, unit,filename 以只写方式打开文件

OPENU, unit,filename 以读写方式打开文件

10)获取帮助

在命令行使用 ? procedure_name

其它IDL资源:

IDL Newsgroups.There are several Usenetnewsgroups. The official IDL newsgroup is:

comp.lang.idl-pvwave

Ray Sterner of the Johns Hopkins AppliedPhysics Laboratory publishes an IDL Frequently Asked questions (IDL-FAQ) listto this newsgroup. This FAQ can be found at:

http://fermi.jhuapl.edu/s1r/idl/idl_faq/idl_faq.html

Unfortunately, the FAQ has not been updatedfor a while.

Other useful WWW Sites

Research Systems has information on IDL ingeneral at:

http://www.rsinc.com/

Pete Riley's IDL Home Page

http://nis-www.lanl.gov/~uk2/idl/

Coyote's Guide to IDL Programming

http://www.dfanning.com/

Wayne Landsman's IDL Astronomy Library WWWpage is at:

http://idlastro.gsfc.nasa.gov/homepage.html

The JHU/APL/S1R IDL library WWW page is at:

http://fermi.jhuapl.edu/s1r/idl/idl.html

Ray Sterner's Color Shaded Relief Maps madeby IDL are at:

 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDL(ENVI/IDL) 简(jian)明(lou)教程:一、IDL基础 的相关文章

  • IDL文件是什么详细介绍

    IDL是什么详细介绍 IDL Interface Definition Language 即接口定义语言 xff0c 是CORBA规范的一部分 xff0c 是跨平台开发的基础 IDL提供一套通用的数据类型 xff0c 并以这些数据类型来定义
  • IDL(ENVI/IDL) 简(jian)明(lou)教程:一、IDL基础

    IDL是一门简单易用的 xff08 包括但不限于 xff09 科学计算和可视化语言 xff0c 包含大量的函数 xff0c 尤其是同ENVI结合集成了该软件的大量功能 xff0c 因此在遥感图像批量处理上应用广泛 关于IDL xff08 结
  • IDL(ENVI/IDL) 简(jian)明(lou)教程:二、ENVI/IDL批处理入门(以投影转换为例)

    二 ENVI IDL批处理入门 ENVI IDL集成了ENVI软件的高级功能 xff0c 比如打开文件直接使用envi open file File r fid 61 fid即可 xff0c 不用考虑什么格式等 xff0c 再比如做文件投影
  • 利用ENVI对LANDSAT系列数据进行预处理步骤

    数据来源 地理空间数据云 首先 利用envi打开 File gt Open 下载好的Landsat数据中的MTL txt文件 进行辐射定标 在工具栏Toolbox中搜索 Radiometric Correction gt Radiometr
  • envi5.6处理gf3(SAR)详细过程记录

    未完结 待更新 可以参考的处理教程 SAR影像 雷达影像 的预处理 ENVI SARscape多极化单通道数据预处理流程 SARSCAPE中单雷达影像基础处理全过程 本文所使用的文件名 GF3 KAS UFS 017384 E108 9 N
  • ENVI:如何进行图像融合?

    目录 有话要说 什么是图像融合 图像融合的方法以及特点 图像融合有什么好处 ENVI实操 1 1 加载需要融合的图像文件 1 2 搜寻工具并点击打开 Gram schmidt方法 1 3 输入低分辨率的多光谱图像文件 1 4 输入高分辨率的
  • 用ENVI为风云三号VIRR地表温度LST日产品添加头文件(地理信息)

    上一篇文章中我们介绍了怎么用ENVI查看风云三号VIRR地表温度LST日产品的属性 下面介绍怎么用ENVI将该产品从HDF格式转换成ENVI标准格式 2019 1 7更新 有小伙伴说头文件中的datum设置成unknown才可以和他的其他矢
  • ENVI监督分类及精度评价

    最近协助同学做了完整的监督分类数据 特此记录下来 对于ENVI监督分类 是每一个遥感从业者掌握的最基础的一个方法 但是完整的监督分类流程和精度评价 估计往往认识不够 所以以下的分享还是有点意义 监督分类 又称训练分类法 用被确认类别的样本像
  • ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析

    目录 1 课堂内容 2 知识储备 3 编程 1 课堂内容 读取OMI数据 HDF5 并输出为Geotiff文件 最重要的是数据的处理以及输出 这里我个人觉得难度不大 第一 获取OMI文件的NO2数据集的数据以及对数据中的异常值做处理 譬如全
  • Thrift快速入门

    文章目录 Thrift的安装 windows下安装 Linux下安装 Thrift的使用 编写IDL文件 命名空间 namespace 基本数据类型 类型定义 typedef 结构体类型 struct 枚举类型 enum 异常类型 exce
  • 如何在 idl 中声明 IStream,以便 Visual Studio 将其映射到 s.w.interop.comtypes?

    我有一个 COM 对象 需要从 C 客户端获取流并对其进行处理 看来我应该使用 IStream 所以我像下面这样写我的idl 然后我使用 MIDL 编译为 tlb 编译我的解决方案 注册它 然后将对我的库的引用添加到 C 项目 Visual
  • COM - #include 生成的标头与 #import 生成的 tlb

    我有许多生成 COM DLL 的项目 这些项目输出以下内容 projectname i h projectname i c projectname p c projectname i tlb 然后 当另一个项目使用这个 DLL 时 它的使用
  • 如何防止 coclass 实现在 ATL 类型库中公开

    我正在构建一个带有类工厂类型的 ATL 类型库 有点像这样 object uuid interface INumber IDispatch propget id 0 HRESULT Value out retval LONG pVal ob
  • 当未提供 COM+ dll 时,从 COM+ dll 获取 IDL(用于 TLB)

    我有一个 dll 其中包含一些带有特定 自定义接口进行查询的 directshow 过滤器 COM 大多数第 3 方 directshow 组件包含嵌入式 tlb 文件 可用于跨环境通信 C typelib 导入 我不想尝试手动创建 c 所
  • 如何在COM接口定义中指定用户定义类型参数?

    我的 COM 接口方法之一需要用户定义类型的参数 如下所示 uuid 58ADDA77 274B 4B2D B8A6 CAB5A3907AE7 object Interface interface IRadio IUnknown HRESU
  • 无需重新编译即可更改 CORBA 接口

    我想向现有服务器的 CORBA 接口添加一个方法 这需要重新编译所有客户端吗 我用的是TAO 不需要重新编译客户端 也不应该这样做 无论您使用什么 ORB 正如 Adam 所指出的 查找是通过操作名称完成的 直接文本比较 我已经使用我们基于
  • 缺少 Idlj 编译器 (Linux/JDK 11)

    找不到idlj编译工具 idl文件 已检查 usr bin and usr lib jvm java 11 jdk 它不是和JDK捆绑在一起的吗 如何添加idlj编译器 附 我更喜欢Python 不太使用Java 如果这是一个愚蠢的问题 我
  • C# - 编写 COM 服务器 - 映射到方法的属性

    我们正在尝试替换最初为 VB6 应用程序编写的 COM 服务器 我们无法访问源代码 由于某种原因 VB6 应用程序可以调用我们的构造函数 但随后它会得到 系统错误 H80004002 没有这样的 接口支持 我假设当它尝试使用 QueryIn
  • 什么是IDL?

    IDL 是什么意思 我用谷歌搜索了一下 发现它代表接口定义语言 用于组件的接口定义 但是 在实践中 IDL 的目的是什么 微软使用它吗 接口定义语言 IDL 用于在远程过程调用 RPC 中建立客户端和服务器之间的通信 它有很多变体 例如 S
  • 创建仅包含枚举的 COM 库时出现问题

    我正在做一个 COM 互操作项目 用 C 和 NET Interop 替代一些 VB 和 C ATL COM 项目 当我在 NET 中定义枚举并将它们设为 ComVisible 时 它 们会公开为 Typelib EnumType Enum

随机推荐

  • 3、Oracle PL/SQL中Date格式及格式转换

    该文章是 PL SQL基础 xff08 3 xff09 xff1a 小专题 系列文章之一 Oracle 插入日期 xff08 时间 xff09 时报错 xff1a ORA 01861 文字与格式字符串不匹配 这是由于插入的日期格式和数据库现
  • 5、Oracle数据库insert后获取自增的ID

    该文章是 PL SQL基础 xff08 3 xff09 xff1a 小专题 系列文章之一 在 insert 后使用 select 序列名 CURRVAL from dual 可以获取 insert后自增的ID 具体 SQL 语句 xff1a
  • 解决cmd 中ping>nul语句提示命令符无法识别

    问题描述 xff1a 在批量使用chrome exe ftp data hdf amp ping n10 127 0 0 1 gt nul 下载数据时 xff0c 命令行没有因为ping命令暂停 解决 xff1a 怀疑是ping这部分命令存
  • C#控件限制输入字符数且可用退格

    对于C 控件 xff08 例如textbox xff09 的输入限制长度 xff0c 直接想到的方法是在控件的KeyPress事件时判断控件已有的字符数来限制 假设控件名称为DAForm myBox4 xff0c KeyPress事件简单的
  • XXX事件的重载均与委托"System.EventHandler"不匹配

    在给动态创建控件添加事件时容易遇到的一个错误就是 xff1a XXX事件的重载均与委托 34 System EventHandler 34 不匹配 假设控件是MovePicBox xff0c 使用如下代码添加KeyPress事件 xff0c
  • 外部启动c#窗体程序传参问题

    问题 xff1a 需要在一个软件里启动另一个独立的C 窗体软件并传入参数 xff0c 例如下面的启动语句 string language 61 34 en us 34 System Diagnostics Process Start 34
  • C#控件控制输入文本长度

    C 在控制控件输入文本的长度时要注意两个问题 xff1a 1 传递的事件参数类型要是 KeyPressEventArgs xff1b 2 对退格键 xff08 backspace xff09 做例外处理 xff0c 不然在输入到最大程度时无
  • python打印等腰三角形

    d 61 int input 39 enter an int 39 l 61 39 39 2 d 1 d 初始化列表 for i in range d l i 61 list l i 字符串转列表 x 61 i y 61 0 x 61 d
  • 7、Oracle的;与ORA-00911: invalid character

    写SQL查询 Oracle中的数据时容易遇到一个奇怪的问题 xff1a 在一般的SQL developer查询分析器中写好的SQL语句运行一切正常 xff0c 放到C 写的程序中提交 ORACLE执行就报错 错误代码如下 xff1a ORA
  • C语言变量声明加冒号的用法

    有些信息在存储时 xff0c 并不需要占用一个完整的字节 xff0c 而只需占几个或一个二进制位 例如在存放一个开关量时 xff0c 只有0和1 两种状态 xff0c 用一位二进位即可 为了节省存储空间 xff0c 并使处理简便 xff0c
  • Matlab adjust axis tick labels, limits, and tick locations

    From https cn mathworks com matlabcentral answers 92565 how do i control axis tick labels limits and axes tick locations
  • Matlab 旋转坐标轴标记文本

    在绘图中当X坐标轴标记 xff08 注意不是坐标轴名称的标签 xff09 是文本且较密集的时候我们会希望能够旋转标签以容得下所有内容 xff0c 当Y坐标轴标记是文本时 xff0c 我们也希望文本可以顺着Y轴的方向 这些都需要旋转坐标轴的标
  • Matlab - Extract values from boxplot(从箱图中获取数据)

    From http stackoverflow com questions 9728970 matlab extract values from boxplot How to extract values from built in box
  • matlab写hdf文件(含地理信息文件hdfeos)

    本文介绍matlab写hdf4和hdf5的一些方法 hdf的一些基础信息可以参考 xff1a https sanwen8 cn p 1fcFE9f html 1 matlab写hdf4文件 通常有两种方法 xff1a 1 xff09 mat
  • oracle ORA-01000: maximum open cursors exceeded问题的解决方法

    From http blog csdn net uskystars article details 46679835 项目在运行过程中 xff0c 后台报错 xff1a Java代码 ORA 01000 maximum open curso
  • emgu.cv的图像金字塔操作

    emgu cv里有三个常用的影像金字塔 xff08 重采样 xff0c 每一级倍数2 xff09 函数 xff1a 1 BuildPyramid int maxLevel 建立多级影像金字塔 C 例子 xff1a Int maxLevel
  • ENVI栅格裸数据生成shp和kml矢量文件

    ENVI栅格裸数据生成shp和kml矢量文件 生成kml文件需要用到ArcMap xff0c 但是ArcMap不能直接加载ENVI裸数据 xff0c 需要在ENVI里将栅格数据转为shp或另存为ArcViewRaster 前者生成kml文件
  • 笔记:刘未鹏思考的技术与艺术(原“学会思考”)

    在读 暗时间 这本书的时候了解到刘未鹏 xff0c 也了解到关于心理学 学会思考 的豆列 xff0c 推荐的书很棒 xff0c 体系也很完善 xff0c 特作记录 豆列的地址在 xff1a https www douban com doul
  • python文件读写的缓冲行为

    文件的io操作的缓冲行为分为 全缓冲 xff1a 同系统及磁盘块大小有关 xff0c n个字节后执行一次写入操作 行缓冲 xff1a 遇到换行符执行一次写操作 无缓冲 xff1a 立刻执行写操作 open 函数 help open Help
  • IDL(ENVI/IDL) 简(jian)明(lou)教程:一、IDL基础

    IDL是一门简单易用的 xff08 包括但不限于 xff09 科学计算和可视化语言 xff0c 包含大量的函数 xff0c 尤其是同ENVI结合集成了该软件的大量功能 xff0c 因此在遥感图像批量处理上应用广泛 关于IDL xff08 结