IDL强大的交互式数据处理开发语言.ppt
强大的交互式数据处理开发语言强大的交互式数据处理开发语言内容内容n n语法基础语法基础n n程序设计程序设计n n图形系统与图像处理图形系统与图像处理n nIDLIDL集成开发集成开发内容内容n n语法基础语法基础n n程序设计程序设计n n图形系统与图像处理图形系统与图像处理n nIDLIDL集成开发集成开发HelloWhoPRO HelloWhoPRO HelloWhoname=name=read,name,prompt=input your name:;read,name,prompt=input your name:;按提示信息按提示信息按提示信息按提示信息输入姓名输入姓名输入姓名输入姓名print,Hello,name,!;print,Hello,name,!;依次输出依次输出依次输出依次输出HelloHello、输入的、输入的、输入的、输入的姓名和姓名和姓名和姓名和!endendHelloWho例子分析以及源文件创建例子分析以及源文件创建PRO HelloWho PRO HelloWho ;PRO;PRO用于定义一个过程用于定义一个过程用于定义一个过程用于定义一个过程 ,HelloWhoHelloWho是过程名是过程名是过程名是过程名 ;表示注释;表示注释;表示注释;表示注释name=name=;定义一个字符串变量等于空定义一个字符串变量等于空 ,可以看到,可以看到IDLIDL为强语言类型、其中字符用为强语言类型、其中字符用 或或“”“”read,name,prompt=input your name:;read,name,prompt=input your name:;按提示信息输入姓名按提示信息输入姓名按提示信息输入姓名按提示信息输入姓名;读取输入信息到字符串变量中。查看帮助(鼠标悬停)、读取输入信息到字符串变量中。查看帮助(鼠标悬停)、读取输入信息到字符串变量中。查看帮助(鼠标悬停)、读取输入信息到字符串变量中。查看帮助(鼠标悬停)、F1F1print,Hello,name,!;print,Hello,name,!;依次输出依次输出依次输出依次输出HelloHello、输入的姓名和、输入的姓名和、输入的姓名和、输入的姓名和!;向控制台输出向控制台输出向控制台输出向控制台输出EndEnd;结束;结束;结束;结束数据类型数据类型 Data Type基本数据类型组合数据类型常量常量 Constants n n整型常量整型常量n n浮点型和双精度常量浮点型和双精度常量十进制 Byte nB 12B,34B Integer n or nS 12,12S,425,425S Unsigned Integer nU or nUS 12U,12US Long nL 12L,94L Unsigned Long nUL 12UL,94UL 64-bit Long nLL 12LL,94LL Unsigned 64-bit Long nULL 12ULL,94ULL 常量:是指运行过程中其值始终不会发生变化的数据。n.102.n.102 n.n 10.2 nE 10E nEsx 10E5 n.Esx 10.E-3.nEsx.1E+12 n.nEsx 2.3E12 双精度的与浮点型的形式类似,把D换成E即可 n n复数常量复数常量n n字符常量字符常量 复数由实部和虚部两部分组成,实部和虚部都可以是浮点数或者双精度浮点数,格式为COMPLEX(实部,虚部)或者COMPLEX(实部)如:COMPLEX(1.2,2),COMPLEX(102.8)用定界符号括起来的任意字符,又称字符串。定界符号:,“”配对使用 Hi there 定界符号是字符串一部分,用另一个 Im happy 0到7打头时用 “129”变量变量 Variables 变量:是指运行过程中其值可以发生变化的数据。变量名是指变量起的名字,变量的功能是用来存储各种数据类型的常量。变量的命名规则:变量名由英文字母、数字、下划线和符号$组成,而且必须以英文字母开头,长度最多不超过128个字符,中间不能有空格。EOF、6A、_36、AB、ab cd 系统变量内存变量根据来源分为内部系统变量和自定义系统变量。系统变量的名称均由感叹号“!”开头。自定义系统变量,使用 DEFSYS 临时存储于内存中的变量,用来存放操作或程序运行过程中的各种类型的原始数据、中间结果和最终结果。内存变量的创建及其类型转换 非强数据语言,变量的属性是动态改变的 整型为短整型,注意使用L var=5 为整型 var=var*2.0 变为浮点 NaNn nIDLmyvar=32L IDLmyvar=32L ;定义短整形变量;定义短整形变量n nIDLmyvar 1=32 LL IDLmyvar 1=32 LL ;定义长整形形变量;定义长整形形变量n nIDLHELP,myvarIDLHELP,myvar ;显示变量;显示变量myvarmyvar的信息的信息n nIDLHELP,MYVAR1 IDLHELP,MYVAR1 ;显示变量;显示变量myvar1myvar1的信息的信息n nIDLmyvar3=1.2DIDLmyvar3=1.2Dn nIDLmyvar*=myvar3IDLmyvar*=myvar3n nIDLmystr4=8IDLmystr4=8n nIDLmyvar 5=myvar+long(mystr4)IDLmyvar 5=myvar+long(mystr4)n nIDLmyvar 6=COMPLEX(2.0,5.0D)IDLmyvar 6=COMPLEX(2.0,5.0D)从执行结果可以看到从执行结果可以看到1 1、IDLIDL语言为非强语言类型、变量类型定义通过后缀名、语言为非强语言类型、变量类型定义通过后缀名、COMPLEXCOMPLEX来来2 2、变量需要先定义后调用、语言不区分大小写、变量需要先定义后调用、语言不区分大小写3 3、变量类型动态改变、变量类型动态改变4 4、了解类型转换函数、了解类型转换函数5 5、认识、认识IDLIDL命令行、通过键盘命令行、通过键盘、可以看前后面输入的命令可以看前后面输入的命令IDL命令行、类型、变量练习数组数组 Arrays n n数组格式数组格式n n数组创建数组创建数组:一组有序数据的集合,由一组名字相同,而下标不同的多个元素组成数组元素:数组中的每一个元素。一个数组元素又相当于一个内存变量格式:数组名:下标列表 数组名:是数组的名字,其命名的规则与变量命名规则相同。下标列表:表示数组中数组元素的位置,可以是常量、变量、数组或表达式;下标列表中下标要用逗号。1.数组的直接创建法格式:数组名:表达式表 表达式表:数组中数组元素的值。数组元素的总数等于各维数组的元素个数的乘积。数组各维下标的计数从0开始,到各维数组元素个数减少1结束只能创建一维数组到三维数组 一维6个元素myArray6:myArray=212,532,96,25,67,78 二维2行3列二维数组myArray3,2:myArray=1,2,3,4,5,6 三维数组myArray3,2,2:2行(2维)3列(1维)2层(3维)myArray=1,2,3,4,5,6 ,7,8,9,10,11,12 arrayn,m 表示n列m行(与其他语言有别),按行排列,0为下标起点2.数组的函数创建法n n数组引用数组引用1.数组名 功能:直接用数组的名字调用整个数组,使所有数组元素一起参加各种运算2.数组下标列表 即数组名下标,直接调用下标列表指定的数组元素。3.数组(D11:D12,D81:D82)在指定下标范围内,用数组名下标格式,直接调用局部数组元素4.(数组表达式)下标列表 直接调用下标列表指定的数组元素一起参加“数组名表达式指定的运算”数组函数数组函数格式:MAX(数组,MIN=变量)输出最大值,最小值存储在变量中格式:MIN(数组,MIN=变量)输出最小值,最大值存储在变量中格式:N_ELEMENTS(数组)输出数组中元素个数。格式:MEAN(数组,/DOUBLE)计算数组平均值格式:VARIANCE(数组,/DOUBLE)计算数组方差格式:STDDEV数组,/DOUBLE)计算数组标准差数组练习数组练习n nIDLmyvar=1,2,3,4,5,6;IDLmyvar=1,2,3,4,5,6;直接创建法定义两行三列数组直接创建法定义两行三列数组n nIDLprint,myvar;IDLprint,myvar;显示整个数组显示整个数组n nIDLprint,myvar2,0;IDLprint,myvar2,0;显示第一行第三列的数组元素显示第一行第三列的数组元素n nIDLprint,myvar*,0;IDLprint,myvar*,0;显示第一行数组元素显示第一行数组元素n nIDLmyvar 2=indegen(9,6);IDLmyvar 2=indegen(9,6);创建创建6 6行行9 9列的二维数组其值为列的二维数组其值为053053n nIDLmyvar 3=indegen+10;IDLmyvar 3=indegen+10;所有的元素值都加所有的元素值都加1010赋给同维数组赋给同维数组myvar3myvar3n nIDLmyvar20,2:*=600;IDLmyvar20,2:*=600;讲第一列中从第三行开始的元素赋值为讲第一列中从第三行开始的元素赋值为600600n nIDLindex=0,2,0,3,0,5;IDLindex=0,2,0,3,0,5;创建下标数组创建下标数组n nIDL myvar5=total(myvar*2+6)index);IDL myvar5=total(myvar*2+6)index);数组下标数组下标indexindex中三个元素参加运算中三个元素参加运算n nIDLmyvar6=MEAN(myvar2);IDLmyvar6=MEAN(myvar2);数组平均值数组平均值1 1、了解数组的直接创建法和函数创建法、了解数组的直接创建法和函数创建法2 2、数组下标从、数组下标从0 0开始,区别于其他语言列行开始,区别于其他语言列行3 3、数组元素的调用数组元素的调用4 4、数组函数调用,避免用循环、数组函数调用,避免用循环结构体结构体 Structures 结构体:由一组不同类型的变量、数组、结构体组合而成的复合数据类型匿名结构(Anonymous Structures)署名结构(Named Structures)程序运行过程中,数据成员个数和类型可能发生变化数据成员:结构体中的每一个变量、数组、结构体程序运行过程中,命名结构时所用的定义,不能改变。n n匿名结构体创建匿名结构体创建格式1:结构体变量=成员1:表达式1,成员2:表达式2,成员n:表达式n,格式2:结构体变量=CREATE_STRUCT(成员1,表达式1,,成员n,表达式n,,结构体变量2,)格式3:结构体变量=CREATE_STRUCT(成员1,成员n,表达式1,,表达式n,,结构体变量2,)格式4:结构体变量=结构体名n n署名结构创建署名结构创建格式1:结构体变量=结构名,成员1:表达式1,成员2:表达式2,成员n:表达式n 格式2:结构体变量=CREATE_STRUCT成员1,表达式1,,成员n,表达式n,,结构体变量2,,NAME=结构名 格式3:结构体变量=CREATE_STRUCT成员1,成员n,表达式1,,表达式n,,结构体变量2,NAME=结构名n n结构体赋值结构体赋值n n结构体调用结构体调用格式1:结构体变量.成员=表达式格式2:结构体变量=结构体名,表达式,仅仅对于署名结构体结构体变量.成员 结构体练习结构体练习n nIDLxStruct=NAME:xiaoming,AGE:20IDLxStruct=NAME:xiaoming,AGE:20n nIDLyStruct=CREATE_STRUCT(NAME,xiaohong,AGE,18)IDLyStruct=CREATE_STRUCT(NAME,xiaohong,AGE,18)n nIDLzStruct=zStruct=CREATE_STRUCT(NAME,AGE,xiaohua,18)IDLzStruct=zStruct=CREATE_STRUCT(NAME,AGE,xiaohua,18)n nIDLp=CREATE_STRUCT(A,1,B,xxx)IDLp=CREATE_STRUCT(A,1,B,xxx)n nIDLp=CREATE_STRUCT(FIRST,0,p,LAST,3)IDLp=CREATE_STRUCT(FIRST,0,p,LAST,3)n nIDLpp=CREATE_STRUCT(pp,8,p)IDLpp=CREATE_STRUCT(pp,8,p)n nIDL S=ST,TagA:100,TagB:200IDL S=ST,TagA:100,TagB:200n nIDLS1=ST,5,6IDLS1=ST,5,61 1、了解结构体的匿名、署名创建。、了解结构体的匿名、署名创建。指针指针 Pointer IDL 的指针与其他语言的指针有很大的不同,它不是指向存储的地址而仅仅是一个轻型的指向一个堆变量的引用(指针变量)。堆变量可以动态分配(数据类型和数组维数),这意味着传递指针变量就相当于传递动态数据。Pointer ReferencePointer DataPointer in Heap Variablesn n指针创建指针创建n n指针调用指针调用n n指针的释放指针的释放格式:指针变量=PTR_NEW(变量)x=30 myptr=PTR_NEW(x)格式:*指针变量*myptr格式:PTR_FREE 指针变量,指针变量nPTR_FREE,myptr使用之后,不要忘记及时释放运算符运算符n n数值型运算符数值型运算符n n关系型运算符关系型运算符n n逻辑型表达式逻辑型表达式()圆括号 +加 +自加 减 自减 *乘 /除法 乘方 求大于 数组或下标#矩阵列乘#矩阵行乘 结构体成员操作PRINT,1025805方法过程名,参数1,参数n,关键字1,关键字n格式:对象变量-函数名(,参数1,参数n,关键字1,关键字n)功能:调用对象变量的过程功能:调用对象变量的函数n n图形系统图形系统 由窗口类IDLgrWindow创建窗口对象格式1:窗口对象名=OBJ_NEW(IDLgrWindow,COLOR_MODEL=0)格式2:窗口对象名-SetProperty,COLOR_MODEL=0格式3:窗口对象名-IDLgrWindow:Draw,视图对象名格式4:窗口对象名-IDLgrWindow:Cleanup图像图像直接图形系统显示直接图形系统显示1.1.使用图像查询函数使用图像查询函数QUERY_*,QUERY_*,查询图像。查询图像。2.2.使用图像读入函数使用图像读入函数READ_*,READ_*,读入图像。读入图像。3.3.使用使用DEVICEDEVICE命令设置显示模式命令设置显示模式4.4.对于伪彩色,使用对于伪彩色,使用LOADLOAD,XLOAD,TVLCTXLOAD,TVLCT或或XPALETTEXPALETTE装入颜色表。装入颜色表。5.5.使用使用WINDOWWINDOW命令创建显示窗口命令创建显示窗口6.6.使用使用TVTV或或TVSCLTVSCL命令显示图像命令显示图像图像图像对象图形系统显示对象图形系统显示1.1.使用图像查询函数使用图像查询函数QUERY_*,QUERY_*,查询图像。查询图像。2.2.使用图像读入函数使用图像读入函数READ_*,READ_*,读入图像。读入图像。3.3.使用使用IDLgrWindowIDLgrWindow创建显示窗口。创建显示窗口。4.4.使用使用IDLgrViewIDLgrView创建显示窗口。创建显示窗口。5.5.使用使用IDLgrModelIDLgrModel创建模式对象。创建模式对象。6.6.使用使用IDLgrImageIDLgrImage创建图像对象,并设置图像属性。创建图像对象,并设置图像属性。7.7.在在IDLgrModelIDLgrModel对象中,添加对象中,添加IDLgrImageIDLgrImage。8.8.在在IDLgrViewIDLgrView对象中,添加对象中,添加IDLgrModelIDLgrModel。9.9.使用使用IDLgrWindowIDLgrWindow对象的对象的DRAWDRAW方法,显示方法,显示IDLgrImageIDLgrImage图图像对象像对象内容内容n n语法基础语法基础n n程序设计程序设计n n图形系统与图像处理图形系统与图像处理n nIDLIDL集成开发集成开发SAVE文件文件n n与平台无关的二进制文件与平台无关的二进制文件n n可以包含程序和数据以及内存中的内容可以包含程序和数据以及内存中的内容n n如果如果savesave文件是应用程序,可以使用在其它系统上文件是应用程序,可以使用在其它系统上运行运行n n使用使用restorerestore将其恢复到内存中将其恢复到内存中n n可以用于不同平台直接进行数据交换可以用于不同平台直接进行数据交换IDL程序发布成程序发布成savn n初始化初始化IDL IDL:.FULL_RESET_SESSION.FULL_RESET_SESSIONn n编译该文件:编译该文件:.COMPILE.COMPILEn n提取依赖函数:提取依赖函数:RESOLVE_ALLRESOLVE_ALLn n生成生成savesave文件:文件:save,routineName,filename=routineName.sav,/routinsave,routineName,filename=routineName.sav,/routinesesIDL集成开发集成开发n nCallableCallable实例在VC调用ENVI函数:1.首先在建立一个VC的MFC工程,然后ITTIDL70externalinclude目录下拷贝idl_export.h头文件,并添加到VC工程中2.工程设置连接 中的对象/库模块 中 添加idl.lib 3.工具选项目录 中的Library files 添加安装路径ITTIDL70BINBIN.X864.我的电脑右键属性 高级环境变量 系统变量 path中添加;安装路径ITTIDL70BINBIN.X865.IDL调用ENVI函数 envi,/restore_base_save_files&envi_batch_ini6.IDL_Win32Init(0,handle,NULL,0);IDL初始化7.IDL_ExecuteStr(“restore,satstretch.sav”);执行IDL命令行8.IDL_Cleanup(true);清除IDL n nIDLDrawWidget ActiveX IDLDrawWidget ActiveX 实例在C#调用IDL函数:1.首先在建立一windows应用程序。在工具箱上右键选择项COM组建选中IDLDrawWidget Control 3.02.拖动 控件到窗体上3.axIDLDrawWidget1.IdlPath 设定IDL库文件目录4.n=axIDLDrawWidget1.InitIDL(int)this.Handle);初始化IDL控件5.axIDLDrawWidget1.ExecuteStr(“”);执行IDL命令n nIDLIDL与与ArcGISEngineArcGISEngine集成集成