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

    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:

 


  • 11
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值