envi idl怎么打开idl读出的dat和envi读出的不一样

当前位置: >>
IDL 培训教程Esri 中国(北京)有限公司2011 年 IDL 培训教材123前言 .....................................................................
......................................................1 1.1 为什么要编程..................................................................................................1 1.2 为什么要学 IDL ..............................................................................................1 1.3 IDL 的优势 ......................................................................................................1 1.4 可利用资源 .....................................................................................................2 1.5 说明 ................................................................................................................2 IDL 的使用 ................................................................................................................3 2.1 IDL 的安装 ......................................................................................................3 2.1.1 运行安装 ...............................................................................................3 2.1.2 安装确认 ...............................................................................................3 2.1.3 扩展功能选择 .......................................................................................4 2.1.4 开始安装 ...............................................................................................4 2.1.5 安装许可 ...............................................................................................5 2.2 目录说明 .........................................................................................................7 2.3 工作台入门 .....................................................................................................7 2.3.1 启动工作台 ...........................................................................................8 2.3.2 工作空间 ...............................................................................................9 2.3.3 工程(project).....................................................................................9 2.3.4 文件(file) ........................................................................................ 11 2.3.5 查看器(View) .................................................................................15 2.3.6 控制台组件 .........................................................................................15 2.3.7 断点及调试 .........................................................................................15 2.3.8 IDL 的路径管理 ...................................................................................16 2.4 获取帮助 .......................................................................................................17 2.4.1 函数帮助 .............................................................................................17 2.4.2 帮助启动 .............................................................................................17 2.5 编写 IDL 程序 ...............................................................................................21 2.5.1 命令行模式 .........................................................................................21 2.5.2 批处理模式 .........................................................................................21 2.5.3 编译模式 .............................................................................................22 2.5.4 IDL 程序 ..............................................................................................22 2.5.5 过程和函数的区别 ..............................................................................22 IDL 语法基础...........................................................................................................24 3.1 变量 ..............................................................................................................24 3.1.1 局部变量 .............................................................................................24 3.1.2 系统变量 .............................................................................................27 3.2 数组 ..............................................................................................................30 3.2.1 概述 ....................................................................................................30 3.2.2 创建数组 .............................................................................................30 3.2.3 数组的存储 .........................................................................................31 3.2.4 使用数组 .............................................................................................32 3.2.5 运算 ....................................................................................................33 3.3 字符及字符串................................................................................................44 IDL 培训教材3.3.1 创建字符串和字符串数组 ...................................................................44 3.3.2 特殊字符 .............................................................................................44 3.3.3 部分字符操作函数 ..............................................................................45 3.4 结构体 ..........................................................................................................46 3.4.1 概述 ....................................................................................................46 3.4.2 创建结构体 .........................................................................................47 3.4.3 访问结构体 .........................................................................................47 3.4.4 结构体操作相关函数...........................................................................47 3.5 指针 ..............................................................................................................48 3.5.1 概述 ....................................................................................................48 3.5.2 创建和访问指针 ..................................................................................48 3.5.3 空指针 ................................................................................................48 3.5.4 指针的内存控制 ..................................................................................49 3.5.5 指针操作函数 .....................................................................................49 3.6 对象 ..............................................................................................................50 3.6.1 概述 ....................................................................................................50 3.6.2 对象创建 .............................................................................................50 3.6.3 对象使用 .............................................................................................50 3.6.4 对象销毁 .............................................................................................51 3.6.5 相关函数 .............................................................................................51 3.7 链表 ..............................................................................................................52 3.7.1 概述 ....................................................................................................52 3.7.2 链表创建 .............................................................................................52 3.7.3 链表访问 .............................................................................................52 3.7.4 链表销毁 .............................................................................................53 3.8 哈希表 ..........................................................................................................53 3.8.1 概述 ....................................................................................................53 3.8.2 哈希表创建 .........................................................................................53 3.8.3 哈希表访问 .........................................................................................53 3.8.4 哈希表添加 .........................................................................................54 3.8.5 哈希表销毁 .........................................................................................54 3.9 运算符 ..........................................................................................................54 3.9.1 数学运算符 .........................................................................................54 3.9.2 逻辑运算符 .........................................................................................55 3.9.3 位运算符 .............................................................................................56 3.9.4 关系运算符 .........................................................................................56 3.9.5 数组运算符 .........................................................................................58 3.9.6 其他运算符 .........................................................................................58 3.9.7 运算符的优先级 ..................................................................................59 3.10 其他符号 .....................................................................................................60 3.10.1 $续行符 ..............................................................................................60 3.10.2 &同行符 .............................................................................................60 3.10.3 ;注释符...............................................................................................60 IDL 培训教材456IDL 编程基础...........................................................................................................61 4.1 程序控制 .......................................................................................................61 4.1.1 循环语句 .............................................................................................61 4.1.2 条件语句 .............................................................................................62 4.1.3 跳转语句 .............................................................................................64 4.2 位置参数及关键字参数 .................................................................................64 4.2.1 位置参数 .............................................................................................64 4.2.2 关键字参数 .........................................................................................65 4.2.3 参数继承 .............................................................................................65 4.2.4 参数传递机理 .....................................................................................65 4.2.5 相关函数 .............................................................................................67 4.3 错误处理 .......................................................................................................67 4.3.1 错误处理程序 .....................................................................................67 4.3.2 数学错误 .............................................................................................68 4.4 调用执行方式................................................................................................69 4.4.1 EXECUTE()函数 ..................................................................................69 4.4.2 CALL_FUNCTION 函数 ......................................................................69 4.4.3 CALL_PROCEDURE ...........................................................................69 4.5 编译规则 .......................................................................................................69 4.6 IDL 高效编程 .................................................................................................69 4.6.1 释放内存 .............................................................................................70 4.6.2 优化运行时间 .....................................................................................70 输入与输出 ..............................................................................................................72 5.1 标准输入输出................................................................................................72 5.1.1 输入输出函数 .....................................................................................72 5.1.2 格式化输出 .........................................................................................72 5.2 文件读写 .......................................................................................................73 5.2.1 打开文件 .............................................................................................73 5.2.2 读写 ASCII 码文件 ..............................................................................74 5.2.3 读写二进制文件 ..................................................................................76 5.2.4 读写格式文件 .....................................................................................80 5.2.5 图像文件信息查询 ..............................................................................80 5.2.6 JPEG 文件操作 ....................................................................................81 5.2.7 科学数据集 .........................................................................................82 IDL 界面创建与事件处理 ........................................................................................86 6.1 iTools 界面 .....................................................................................................86 6.2 界面创建 .......................................................................................................86 6.2.1 单元组件界面 .....................................................................................86 6.2.2 复合界面 .............................................................................................91 6.2.3 对话框界面 .........................................................................................92 6.2.4 功能界面 .............................................................................................93 6.3 界面的控制 ...................................................................................................94 6.3.1 Widget_Control .....................................................................................94 IDL 培训教材786.3.2 Widget_Info ..........................................................................................94 6.4 事件的处理 ...................................................................................................94 6.4.1 事件的结构 .........................................................................................95 6.4.2 事件的“管家” ......................................................................................95 6.4.3 事件的处理 .........................................................................................95 直接图形法 ..............................................................................................................96 7.1 概述 ..............................................................................................................96 7.2 图形显示设备................................................................................................96 7.3 显示模式 .......................................................................................................96 7.3.1 8 位显示模式 .......................................................................................96 7.3.2 24 位显示模式 .....................................................................................98 7.4 系统的字体 .................................................................................................100 7.4.1 矢量字体 ...........................................................................................100 7.4.2 设备字体 ...........................................................................................100 7.4.3 TrueType 字体 ....................................................................................101 7.5 坐标系统 .....................................................................................................102 7.6 图形图像显示..............................................................................................102 7.6.1 显示窗口 ...........................................................................................102 7.6.2 绘制曲线 ...........................................................................................103 7.6.3 显示图像 ........................................................................................... 112 7.6.4 绘制曲面 ........................................................................................... 113 7.6.5 相关函数参考 ................................................................................... 114 7.6.6 体数据显示 ....................................................................................... 114 7.7 地图投影 ..................................................................................................... 115 7.7.1 功能描述 ........................................................................................... 115 7.7.2 举例 .................................................................................................. 115 IDL 图像处理......................................................................................................... 116 8.1 图像文件的输入输出................................................................................... 116 8.2 图像裁剪 ..................................................................................................... 116 8.3 图像的尺寸修改 .......................................................................................... 116 8.4 图像的位置变换 .......................................................................................... 117 8.5 图形的域变换.............................................................................................. 118 8.6 图像的增强和滤波 ...................................................................................... 118 8.6.1 图像增强 ........................................................................................... 118 8.6.2 滤波 .................................................................................................. 119 8.7 图像平滑 ..................................................................................................... 119 8.7.1 均值平滑 ........................................................................................... 119 8.7.2 中值平滑 ........................................................................................... 119 8.8 图像边界检测.............................................................................................. 119 8.9 图像形态学处理 .......................................................................................... 119 8.9.1 腐蚀和膨胀 .......................................................................................120 8.9.2 开运算 ..............................................................................................120 8.9.3 闭运算 ..............................................................................................120 IDL 培训教材8.9.4 峰值检测 ...........................................................................................120 8.9.5 分水岭边界检测 ................................................................................120 8.9.6 图像识别 ...........................................................................................120 8.9.7 图像的梯度边界检测.........................................................................120 8.9.8 图像细化 ...........................................................................................121 8.9.9 图像分割 ...........................................................................................121 9 IDL 对象图形法 .....................................................................................................122 9.1 对象层次结构..............................................................................................122 9.2 对象基本操作..............................................................................................122 9.2.1 创建对象 ...........................................................................................122 9.2.2 方法调用 ...........................................................................................122 9.2.3 销毁对象 ...........................................................................................122 9.3 IDL 图形基本对象 .......................................................................................123 9.3.1 IDLgrWindow 对象.............................................................................123 9.3.2 IDLgrView 对象 .................................................................................123 9.3.3 IDLgrModel 对象 ...............................................................................125 9.3.4 原子对象 ...........................................................................................125 9.4 二维图形显示..............................................................................................126 9.4.1 线对象 ..............................................................................................126 9.4.2 多边形 ..............................................................................................128 9.4.3 文本 ..................................................................................................128 9.4.4 坐标轴 ..............................................................................................132 9.4.5 曲线 ..................................................................................................132 9.5 三维图形显示..............................................................................................133 9.6 坐标统一 .....................................................................................................133 9.7 对象的交互操作 ..........................................................................................133 9.8 编写类 ........................................................................................................133 9.8.1 编写新对象类 ...................................................................................133 9.8.2 编写继承类 .......................................................................................134 9.9 地图投影 .....................................................................................................135 10 快速可视化 ............................................................................................................136 10.1 概述 ..........................................................................................................136 10.2 可视化函数 ...............................................................................................136 10.2.1 可视化函数 .....................................................................................136 10.3 应用举例 ...................................................................................................137 10.3.1 曲线绘制 .........................................................................................137 10.3.2 地图显示 .........................................................................................137 10.3.3 曲面显示 .........................................................................................138 10.4 控制与参数 ...............................................................................................138 11 智能化工具 iTools ..................................................................................................139 11.1 iTools 概述 .................................................................................................139 11.2 iTools 的使用 ..............................................................................................139 11.2.1 数据导入和导出 ..............................................................................139 IDL 培训教材11.2.2 数据和对象属性的查看 ...................................................................144 11.2.3 显示操作 .........................................................................................145 11.2.4 添加标注 .........................................................................................146 11.2.5 公共操作 .........................................................................................147 11.2.6 iPlot 使用..........................................................................................147 11.2.7 iContour 使用 ...................................................................................148 11.2.8 iImage 使用 ......................................................................................149 11.2.9 iMap 使用 .........................................................................................155 11.2.10 iSurface 使用 ..................................................................................159 11.2.11 iVolume 使用 ..................................................................................164 11.2.12 iVector 使用 ....................................................................................165 11.3 开发 ..........................................................................................................167 12 IDL 程序的部署与发布 ..........................................................................................168 12.1 IDL 的部署.................................................................................................168 12.1.1 Runtime 许可发布 ............................................................................168 12.1.2 虚拟机免费发布 ..............................................................................168 12.2 IDL 的发布.................................................................................................168 12.2.1 Sav 文件 ...........................................................................................168 12.2.2 可执行文件(Windows 下的 exe) ..................................................169 12.2.3 COM 和 JAVA ..................................................................................172 13 混合调用................................................................................................................173 13.1 IDL 功能扩展 .............................................................................................173 13.1.1 直接调用 SPAWN ............................................................................173 13.1.2 IDL 调用 ActiveX .............................................................................173 13.1.3 IDL 调用 DLL ..................................................................................178 13.1.4 IDL 使用 DLM .................................................................................180 13.2 其他语言与 IDL ........................................................................................185 13.2.1 对象输出助手 ..................................................................................185 13.2.2 IDLDrawWidget 组件........................................................................193 13.2.3 COM_IDL_CONNECT .....................................................................195 13.2.4 Callable IDL .....................................................................................198 14 ENVI 功能扩展 ......................................................................................................200 14.1 ENVI 波段运算和波谱运算 ........................................................................200 14.1.1 波段运算 .........................................................................................200 14.1.2 波谱运算 .........................................................................................203 14.1.3 几个例子 .........................................................................................203 14.2 用户函数 ...................................................................................................204 14.2.1 用户函数介绍 ..................................................................................204 14.2.2 ENVI 菜单介绍 ................................................................................204 14.2.3 ENVI 组件介绍 ................................................................................205 14.2.4 编写实例 .........................................................................................209 14.3 ENVI 的二次开发.......................................................................................212 14.3.1 二次开发模式 ..................................................................................212 IDL 培训教材14.3.2 14.3.3 14.3.4 14.3.5 14.3.6 14.3.7 14.3.8常用关键字及函数 ..........................................................................212 文件管理函数 ..................................................................................213 打开文件函数 ..................................................................................213 获取数据函数 ..................................................................................214 感兴趣区函数 ..................................................................................214 数据保存函数 ..................................................................................214 实例编写 .........................................................................................216 IDL 培训教材1前言1.1 为什么要编程这是比较古老的话题, 一句话概括: 让计算机实现自己的想法。 因为人总有自己的想法, 有些常规的想法前人已经想过,那么现成的软件或程序可用;但如有自己独特的想法,如何 在计算机中实现呢?这样就必须得学会编程。1.2为什么要学 IDL计算机技术发展到今天,可以说计算机的语言非常多。 但对一些科学家、技术工程师的非专业编程人士来说,并不一定所要实现的所有功能都 要从底层写起。他们的编程需要一般就两点: ? 编写各种满足工作需要的小程序,目的是让工作更加自动化、方便化和快捷化,由 于工作的原因一般很少编写大的应用程序。 ? 从学习到使用越快越好, 不想学了好几个月才刚刚弄明白 C++中的类、 对象的使用, 需要尽快的从学习语言转到在实践中应用。 对专业编程人士来说,通过 IDL 与其他语言的混合编程,借用 IDL 高效、快速的可视化 与分析功能,他们可以快速进行应用程序及编写跨平台软件。1.3IDL 的优势IDL(Interactive Data Language)交互式数据语言是进行数据分析、可视化表达和应用开 发的第四代可视化,它最初的原型为美国航空航天局(NASA)的一个可视化项目,由于其 灵活和强大的数据分析和可视化性能,受到 NASA 的科学家和工程师的喜爱,进而发展成为 一门独立的可视化语言。 它的优势主要有以下几个方面: ? 数据访问 ―― 灵活的数据输入、输出方式 在科学研究中,将会使用大量不同格式的数据。IDL 基本上支持各种数据格式,并提供 了大量的数据读写工具,免除数据读写的烦恼,可以将大量的精力放在数据分析上。 ? 数据分析 ―― 强大的图像处理、信号处理和数据统计分析能力 IDL 集成了完善的数据分析、数据统计、图像处理和信号处理软件包。项目应用 IDL 可 以节省大量时间。 使用传统的 C 或者 FORTRAN 语言需要数天或数周的项目, 使用 IDL 可以 在数小时内完成。 ? 数据可视化 ―― 先进的图形技术和 OpenGL 图形加速技术的二维和三维数据交互 可视化能力 从简单的二维绘图、多维绘图、体积可视化、图像显示、动画,到利用 OpenGL 硬件加 速功能进行交互式的三维图形浏览,以及支持多处理器快速进行体数据渲染,使用 IDL 您可 以轻松获得丰富的可视化效果。 ? 软件开发 ―― 强大的多平台支持、 跨平台的本地化的用户界面、 全新的开发环境、 提供了有效的数据管理手段 ? 可以运行在 Windows、Macintosh 和 UNIX 等多种操作上,从而可以很方 便地进行跨平台开发应用程序。 ? IDL 提供一套完整的、跨平台的本地化用户界面,可以很方便地进行跨平 台开发,构建符合本地平台风格的用户界面。第1页 IDL 培训教材? IDL 工作台提供了 Eclipse 的强大支持、全中文界面显示、强大的代码管理 开发和调试工具。快速构建原型应用程序:IDL 的是一种解释语言,可以在个别问 题上看到立竿见影的结果,同时 IDL 的降低了设计、编译、测试的周期。 ? 集成 ―― 灵活的外部语言接口 IDL 是一个灵活的、可扩展的用于可视化、分析和开发的工具,能够轻松的与其他的软 件工具集成。IDL 能够将其他编程语言的代码和函数导入,也可以将 IDL 实现的功能集成到 其他语言编写的应用程序中去。 ? 程序共享 ―― 灵活多样的程序发布方式和轻松的成果共享 ? 你能够很容易快捷的共享 IDL 应用程序。IDL 虚拟机(Virtual Machine) , 为 IDL 用户和软件开发人员提供了 IDL 应用程序发布的便捷工具。IDL VM 适用于 所有 IDL 支持的平台,可以将 IDL 程序进行跨平台的发布。1.4可利用资源技术支持邮箱:ENVI-IDL@ 技术支持热线:010- ENVI/IDL 资料库:ftp://124.205.245.98,匿名登录 ENVI/IDL 技术殿堂:.cn/enviidl ENVI/IDL 论坛社区:http://bbs./ESRI/forum-28-1.html ENVI/IDL 视频:/ENVIIDL 中国 ENVI/IDL 微博:.cn/enviidl ENVI/IDL 腾讯微博:/ENVI-IDL ITT VIS :/ ESRI 中国社区:http://bbs./ESRI/index.php] IDL 大师 David 个人网站:/ Ronn Kling 个人网站:/ …1.5说明教程中各章节的例子程序在源码工作空间[Code]的 Chapter[章节号]目录下。第2页 IDL 培训教材2IDL 的使用2.1 IDL 的安装下面是 WindowsXP-32 位下的 IDL8.0 安装及许可配置过程。2.1.1 运行安装如光盘未自动运行请双击光盘内的 autorun_win.exe, 在弹出界面中选择 Install 32-bit IDL (如果是网站下载,双击运行 idl80win32_setup.exe)2.1.2 安装确认图2-1 确认安装图2-2 接受安装协议选择安装路径,默认路径是 C:\Program Files\ITT第3页 IDL 培训教材图2-3 选择安装路径2.1.3 扩展功能选择可选的扩展功能有数据库连接工具包 DataMiner、医学影像格式网络访问 DICOM Network Services 根据具体配置情况和需要选择。一般情况下,默认即可。图2-4 扩展功能选择2.1.4 开始安装选择所要安装的模块和功能后,开始安装程序。第4页 IDL 培训教材图2-5 安装进度2.1.5 安装许可许可安装选择 选择“是”, 直接导入许可, 若选择“否”, 可以通过“开始→ENVI4.8→License Wizard” 配置许可。 (1)选择“是”,进入许可安装界面图2-6图2-7许可安装在弹出程序界面中选择第三项,Install a license you have received,导入从 Esri 中国 (北京)有限公司收到的许可文件。第5页 IDL 培训教材图2-8许可导入界面导入许可后点击 Finish 完成安装。图2-9许可安装完成图2-10安装完成第6页 IDL 培训教材(2)通过开始&IDL 8.0-Tools-license wizard配置许可 若在配置许可的时候,选择了“否”,则可进入“开始& IDL 8.0&license wizard”配置许 可。配置方式与方法(1)一致,点击“Install license you have received”导入许可文件。2.2目录说明IDL8.0 如果默认安装,那么安装目录为 C:\Program Files\ITT\IDL\IDL80。 Bin:IDL 的虚拟机及部分功能配置文件; Example:包括 Demo 演示程序集官方提供的例子,很多,功能很强; External:包括 IDL 功能扩展方面的几个例子; Help:IDL 帮助; Lib:强大的函数文件库,大部分是源码,可参考学习; Products:如存在则是对应的 ENVI 的安装后目录; Resource:运行及启动的资源库。2.3工作台入门相比以前的 IDL 版本,IDL8.0 在所有的支持的平台下采用了全新的 Eclipse 框架作 为工作台。更新的主要原因是之前的版本在 UNIX、LINUX 和 Macintosh 下采用的是 X/Motif 程序,很多的功能受到限制使得用户很难熟练使用。图 2-11 IDL6.4 的版本界面第7页 IDL 培训教材图 2-12 IDL8.0 的工作台2.3.1 启动工作台点击开始→程序→ENVI 4.X(IDL8.X)→idl,首次运行 IDL 的时候,会要求用户选择工作 空间位置,此次我们需要将工作空间设置在一个默认目录,如“d:\code”。图2-13 创建工作空间 点击 OK 后进入工作台环境,见图 2-14。图2-14 IDL工作台第8页 IDL 培训教材先设置下当前工作台的参数,在工作台的菜单[窗口]→[首选项]下,设置常规→工作空间 →文本文件编码,选择 GB2312 或 GBK,以避免汉字出现乱码。2.3.2 工作空间IDL 下的工作空间是包含一个或多个 project 的目录,project 可以包含 IDL 的源代码 pro 文件和相关的资源文件。初次使用 IDL 的工作台时会提示你创建一个新的工作空间在默认目 录(Windows 平台是“Documents and Settings”,Macintosh、Solaris 和 Linux 系统平台下是 $HOME 系统变量里面的路径) 。 可以创建多个的工作空间,但是当前 IDL 编译环境下只能有一个是活动的。每次 IDL 的 工作台启动时它都会显示让你选择哪个工作空间,如禁止这个工作空间选择,在选择界面上 勾选“设置为默认工作空间”。如需要切换工作空间,可以在系统菜单下选择“文件”-“切换工 作空间”来进行工作空间的切换。 本次培训选择独立建立一个工作空间 Trainning,建立一个工程项目然后把相关的代码导 入到当前项目中即可。2.3.3 工程(project)IDL 的工程项目是使用 project 来组织和管理 IDL 源代码及工程资源文件的。 每个工程是 当前工作空间的路径或工作空间的子路径,源代码放在工程路径下面对工程使用中的文件搜 索、书签创建等都会带来很大的方便。 工程是 pro 和 function 的集合,通过相互的调用来实现复杂的功能。 2.3.3.1 导入工程 导入已有的工程可以在项目资源管理器中点击右键,菜单中选择“导入”,在导入界面中 选择“常规”下的“现有项目到工作空间中”(图 2-15) 。图2-15工程导入选项 选择“浏览”按钮可选择导入工程所在文件夹,IDL 工作台会自动将目录下所有项目列出 来(图 2-16) 。第9页 IDL 培训教材图2-16导入工程选项设置 选择导入还可以勾选“将项目复制到工作空间中”,如勾选了该选项则自动将项目内的文 件复制到当前工作空间中,不选则使用项目所在文件夹内的文件。 点击完成即可完成已有的工程项目导入操作(图 2-17) 。图 2-17 导入完成 2.3.3.2 建立新工程 建立一个新的工程是要在菜单中选择“文件”-“新建”-“IDL 工程”, 在弹出界面 (见图 2-18) 中输入工程的名称,选择工程的位置在当前工作台目录还是其他目录,为了调试等操作方便 一般建议新建工程在默认的工作台下。图 2-18 新建 IDL 工程第 10 页 IDL 培训教材点击完成,创建的工程在工作空间的项目资源管理器中列出,见图 2-19。图 2-19IDL 的项目资源管理器2.3.3.3 工程添加文件 ? 菜单选择“文件”-“新建”-“IDL 源文件”或在工具栏上选择 ;2.3.3.4 编译工程 ? ? ? ? ? ? ? 选择菜单项目→构建项目; 在项目资源管理器中该工程目录上点击右键,选择构建项目; 快捷键 Ctrl+B; 选择菜单运行→运行工程; 在项目资源管理器中该工程目录上点击右键,选择运行工程; 快捷键 Ctrl+Shift+F8; 点击工具栏图标2.3.3.5 运行工程2.3.4 文件(file)2.3.4.1 打开文件 载入一个文件有两种方式: ? 在菜单中选中文件-打开文件; ? 工具栏按钮中点击 。 2.3.4.2 创建文件 ? ? ? ? ? ? ? ? 创建一个新文件有三种方式: 菜单中选择文件-新建-IDL 源文件; 或选择文件-新建-其他-IDL 源文件; 工具栏按钮中点击 。2.3.4.3 保存文件 菜单中选择文件-保存; 菜单中选择文件-另存为; 菜单中选择文件-全部保存; 工具栏按钮中点击 。第 11 页 IDL 培训教材2.3.4.4 编辑工具 ? 语法的高亮显示图 2-20? 自定义显示格式 首选项→IDL→格式器设置图 2-21?自定义显示颜色图 2-22第 12 页 IDL 培训教材? 鼠标悬停帮助 对程序中的函数需要帮助时可以把鼠标指针移到函数位置,系统会弹出该函数的帮 助,见图 2-23。图 2-23 IDL 编辑器中的悬停帮助?代码辅助图 2-24?模板工具图 2-25?运行选择代码第 13 页 IDL 培训教材图 2-26?常用快捷键图 2-27Ctrl+S 保存文件 Ctrl+N 新建 Ctrl+F8 编译文件 Ctrl+B 构建工程 Alt+/ 开启内容辅助 Ctrl+Shift+F 格式化 IDL 源代码文件 Ctrl+Shift+U 更改为大写 Ctrl+U 更改为小写 Ctrl+Shift+I 添加程序辅助 2.3.4.5 编译和运行 编译运行有两种方式: 在菜单中选择运行-编译 filename.pro 然后选择运行 filename; 在命令行中输入.Compile filename,然后输入 filename 即可;第 14 页 IDL 培训教材2.3.5 查看器(View)可在菜单[窗口]→[显示视图]下进行显示或关闭设置。查看器是 idl 工作台上面的可以移 动的窗口,能够对显示数据、分析和跟命令行进行交互操作,如控制台工具显示了命令行及 编译程序时的所有输出信息。 见图 2-28, 各个查看器可以进行最大、 最小及显示、 隐藏设置。图 2-28 IDL 工作台的查看器2.3.6 控制台组件控制台组件是工作台的信息显示和命令行操作区域(图 2-29) ,因 IDL 在使用中使用命 令行或查看信息输出非常频繁,故该组件经常用到。图 2-29 命令行及命令历史查看器窗口2.3.7 断点及调试2.3.7.1 断点 设置断点首先将你把光标放置在你想设置断点的那行,按下 Ctr+Shitf+B 或双击该行的 最左边。图 2-30 断点添加 2.3.7.2 变量查看 当运行一个存在断点的程序时,会在断点处停止。此时为了程序的调试需要,一般要看 变量的值是否符合程序的编写要求,可以通过命令行、鼠标悬停显示或变量查看器三种方式 来实现。图 2-31 程序调试中的变量查看器第 15 页 IDL 培训教材2.3.7.3 代码步进和步过 添加断点后, 当程序运行到断点位置时会暂停运行, 工具栏中[运行]等按钮自动切换为[恢 复] 等按钮(图 2-32) ,此时可以点击[停止调试]、[逐语句]、[逐过程]等按钮控制程序运行。图 2-32 调试状态时的工具按钮[停止调试]:点击该按钮可中值调试运行中的程序。 [逐语句]:点击该按钮可逐行语句进行调试,如遇到自定义函数,则进入该函数定义部 分逐行语句调试运行。 [逐过程]:点击该按钮可逐过程进行调试,如遇到自定义函数不进入函数,直接一步得 到程序结果。 2.3.7.4 获得程序运行时间 可以通过 PROFILER 查看自定义的进程调用的频率及花费的时间。; First ensure that the routine you want to profile is compiled. void = DIST(500) Now include both user routines and system routines.PROFILERPROFILER, /SYSTEM ; Now perform the actual commands to profile. a = DIST(500) TV, Retrieve the profiling results. PROFILER, /REPORT Module DIST FINDGEN FLTARR N_ELEMENTS ON_ERROR SQRT TV Type (U) (S) (S) (S) (S) (S) (S) (S) 251 1 11 Count 1 1 1 1 1 Only(s) 0.001626 Avg.(s) 0.001626 Time(s) 0.004146 Avg.(s) 0.0041460..............0000100..............000010WIDGET_PROCESS_EVENTS2.3.8 IDL 的路径管理IDL 的路径管理是非常重要的,IDL 中的!Path 变量中存在着一系列的路径列表来供系统 来寻找 pro 和 sav 文件,如果系统解释器遇到了没有编译过的过程名,那么它会在!Path 列表 的路径中寻找同名的过程或 sav, 找到后会自动编译该过程并继续运行。 如在命令行中运行: IDL& map_set,/continents % Compiled module: MAP_SET. % Compiled module: CROSSP. % Compiled module: MAP_CONTINENTS. % Compiled module: FILEPATH. % Compiled module: PATH_SEP. % Compiled module: REVERSE.第 16 页 IDL 培训教材路径自动更新设置见图 2-33,在当前工程的属性菜单中。图 2-33 IDL 路径更新系统的路径管理选项,在菜单的窗口-首选项-IDL-路径中,可分别对 IDL 路径、DLM 路 径和帮助路径进行设置,见图 2-34。图 2-34 IDL 路径管理2.4获取帮助2.4.1 函数帮助在命令行中输入?+A(A 是你所要了解的过程函数或对象)2.4.2 帮助启动点击主菜单[帮助]下的[选中项目帮助]和[帮助内容]功能菜单; 工作台编辑代码时按 F1 或选择一个函数后按 F1,则启动帮助;第 17 页 IDL 培训教材命令行中输入?回车后启动帮助。1) 帮助使用帮助文档分搜索、内容列表和索引三部分内容(图 2-35) 。图 2.35 帮助文档的搜索如需要搜索 size 函数的说明,可以在搜索框中输入 size,点击 Search 按钮,在搜索结果 中点击 SIZE,右侧可显示出详细信息,并对搜索的词 size 高亮显示(图 2-36) 。图 2.36 帮助文档中 size 搜索结果点击工具栏中 Remove search higghlighting 按钮,则图中高亮部分可消除(图 2-37) 。图 2.37 搜索结果的高亮消除第 18 页 IDL 培训教材2) 帮助说明在 SIZE 函数的帮助说明中,文档上部各部分每项内容均为超链接,可以点击查看详细 说明(图 2-38) 。图 2.38 帮助中函数 size 具体说明帮助示例中 size 函数帮助各部分的含义如下: ? Syntax:调用格式; ? Return Value:返回值; ? Arguments:位置参数; ? Keywords:关键字参数; ? Examples:示例代码; ? Version History:版本历史; ? See Also:其他相关函数。 以 SIZE 函数为例,帮助中给出的 Syntax 格式如下: Result = SIZE( Expression [, /L64] [, /DIMENSIONS | , /FILE_LUN | , /FILE_OFFSET | , /N_DIMENSIONS | , /N_ELEMENTS | , /SNAME, | , /STRUCTURE | , /TNAME | , /TYPE] ) 其中: result 为返回值; size()为函数名; Expression 是位置参数(必选) ; 其他由[]中都为关键字参数(可选) ,竖线“|”分隔表示关键字不能同时使用,每个参数的 含义可点击参数进行查看。IDL& ;创建数组变量 IDL& arr = indgen(3,4) IDL& ;获取变量信息 IDL& print,size(arr) 2 IDL& ;获得变量的行列号 IDL& print,size(arr,/dimension) 3 4 2 12第 19 页 IDL 培训教材 3 IDL& ;获取变量的类型 IDL& print,size(arr,/type) 2 IDL& ;下面两个参数互斥,故报错 IDL& print,size(arr,/type,/N_Elements) % SIZE: Conflicting keywords. % Error occurred at: $MAIN$ % Execution halted at: $MAIN$ IDL& ;使用两个参数 IDL& print,size(arr,/L64,/N_Elements) 12 4点击“Index”, 可进入索引界面, IDL 下的所有程序和函数均按字母顺序排列 (图 2-39) 。图 2.39 帮助文档的索引显示点击“Table of Contents”可显示帮助文档主要内容(图 2-40) 。图 2.40 帮助文档的内容显示第 20 页 IDL 培训教材2.5编写 IDL 程序2.5.1 命令行模式命令行方式是 IDL 的一大特色, 为程序编写和调试过程中的功能测试提供了极大地便利。IDL7.1 的 Windows 版本新增加了命令行,如下图所示。DotCommand 该系列命令即可在命令行中进行源代码(pro 文件)的编辑、编译、调试及运行等工作, 且仅能在命令行下执行。命 令 .COMPILE .CONTINUE .EDIT .FULL_RESET_SESSION .GO .OUT .RESET_SESSION .RETURN .RENEW .RUN .SKIP .STEP .STEPOVER .TRACE 编译代码 继续执行代码 在编辑器中打开代码以便编辑 编译器完全重置,比.RESET_SESSION 要彻底; 运行上次编译过的程序 继续执行代码直到返回; 编译器环境重置; 程序返回; 新建一个 pro 编译内存中的代码并立即执行; 跳过一个或多个模块; 调试程序中的移动到下一个模块; 程序运行到另一个节点处; 程序报错时继续执行; 功 能2.5.2 批处理模式最简单的程序是一个 IDL 批处理文件。一个批处理文件由一系列命令组成,这与在 IDL 命令行敲入的命令完全一样。大多数人用批处理文件是为了自动执行自己在 IDL 命令行一次 又一次敲入的命令。 例如,在创建线画图中我们为了要创建数据,并画出图形,那么可以在命令行中键入如 下命令:第 21 页 IDL 培训教材 IDL&curve=Indgen(101) IDL&curve=curve^2 IDL&time=FIndGen(101)*(6.0/100) IDL&Plot,time,curve,XTitle='Time Axis',$ IDL&YTitle=' Displacement ', Title='Experiment这五行代码并不多,但键入三、四次之后,可能已决定把他们放在一个名为 plotline.pro 文本文件中,这文件就是所谓的批处理文件。批处理文件同样只有存储在搜索目录下,IDL 才 能调用。注意,批处理文件中只需键入命令行中内容就可以了,无需 PRO、END 之类。 plotline.pro 中的内容是: curve=Indgen(101) curve=curve^2 time=FIndGen(101)*(6.0/100) Plot,time,curve,XTitle='Time Axis',$ YTitle=' Displacement ', Title='Experiment 要执行该文件中的命令,可如下所示: IDL& @plotline.pro IDL 会严格执行批处理文件中的命令,就像在命令行上键入一样。这意味着有必要用行 续行符($)和其他命令行语言来让 IDL 确认键入的命令。如果在文件中的命令输入错误, 那么出现的错误结果和在命令行键入命令出现的错误结果是一样的。2.5.3 编译模式跟其他语言的运行模式一致,先编写程序文件,然后进行编译运行。 参考 2.2.3 工程,2.2.4 文件章节。2.5.4 IDL 程序IDL 程序和批处理文件在很多方面很相似, 但也存在着很大的区别。 像批处理文件一样, 一个主程序也包含一系列命令。但与之不同的是,这些命令必须以 END 语句结束。 批处理文件和 IDL 主程序最大的区别就是主程序的命令语句先由 IDL 编译器编译成程序 模块,然后才执行代码。这就是为什么在主程序中可以有多行控制语句的原因。 编写主程序的最大优点是在程序中定义的变量可以在 IDL 开发环境(IDLDE)中使用, IDL 的命令都是在那里键入并被解释的。换句话说,在主程序中定义的变量的作用范围是 IDL 整 个开发环境,因而它可以被 IDL 其他命令使用。 新建一个 pro 文件,编写内容如下:pro firstIDL print,'first IDL' tmp = dialog_Message('first idl',/information) end但是更为通常的是,往往希望限定变量的作用范围,以使它们不致于占用大量的内存。 在编程过程中,使用大量的全局变量会使内存的使用效率大大降低。为此,大部分应用程序 都用过程和函数来编写。2.5.5 过程和函数的区别IDL 命令要么是过程,要么是函数首先,在函数命令中,位置参数和关键字参数放在一第 22 页 IDL 培训教材对圆括号中的。在过程命令中,参数和关键字仅排列在一个命令行上。但是,最重要的区别 是 IDL 函数会返回一个值,等号左边的一个变量用于返回该值。这是 IDL 中函数命令和过程 命令根本的区别。 函数命令总是返回一个值,这个数值必须赋给一个变量。函数返回值可能是任一种 IDL 变量,包括数值、数组或结构。 例子PRO test_Function a=1 b=2 result = fun_total(a,b) PRINT,result END ; FUNCTION fun_total, x,y RETURN, x+y END第 23 页 IDL 培训教材3IDL 语法基础3.1 变量IDL 中的变量分为局部变量和系统变量。在 IDL 程序中,二者的区别在于生命周期不一 样,局部变量仅仅在所在的函数或过程中有效,而系统变量则在始终有效或某个程序的周期 中有效。3.1.1 局部变量3.1.1.1 命名规则 变量名称的最大长度不超过 255 个字符,变量的首位只能是字母和下划线,中后部只能 是字母、数字、下划线“_”和连接符“$”。如下正确: abc_3$d ok_24_bit IDL_type variable _day_month_year 如下错误: abc.cha one%file 4_lists $file 变量相关函数 IDL_VALIDNAME 该函数用来检测字符串是否可以作为 IDL 下的变量,并能够将无效字符转换为“_”并返 回变量。调用格式为 IDL_VALIDNAME ( String [, /CONVERT_ALL] [, /CONVERT_SPACES]),IDL& print,IDL_VALIDNAME('idl') idl IDL& print,IDL_VALIDNAME('var') var IDL& print,IDL_VALIDNAME('5var') IDL& print,IDL_VALIDNAME(' 5var',/CONVERT_SPACES) _5var IDL& print,IDL_VALIDNAME('5var',/convert_all) _5var IDL& print,IDL_VALIDNAME('5v#ar',/convert_all) _5v_ar3.1.1.2 基本数据类型 跟其他语言比如 C 不一样,IDL 下的变量无需事先申明,也就是可以通过赋值语句来进 行变量、数组定义的。 IDL 中有 14 种基本数据类型。 在表 3-1 中列出了基本数据类型的每个类型的变量的字节 大小、创建方式、范围和类型转换函数等。除了数据类型外,一个变量有一个组织结构。有 效的组织结构有标量(例如单个数值) 、矢量(真正的一维数组) 、数组(最高可达八维)和 IDL 结构(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段) 。表 3-1 变量类型及类型转换函数数据类型 字节型 16 位有符号整型 32 位有符号长整型 字节数 1 2 4 范围 0 至 255 -32768 至 32767 -2 至 2 -131 31创建变量 Var=0B Var=0 Var=0L类型转换 byte() fix() long()第 24 页 IDL 培训教材64 位有符号整型 16 位无符号整型 32 位无符号长整型 64 位无符号整型 浮点型 双精度浮点型 复数 双精度复数 字符串 指针 对象 8 2 4 8 4 8 8 16 0- -263 至 263-1 0 至 65535 0 至 2 -1 0 至 2 -1 -10 至 10 -1 -10308 38 38 38 64 32Var=0LL Var=0U Var=0UL Var=0ULL Var=0.0 Var=0.0D Var=Complex(0.0,0.0) Var=Dcomplex(0.0D,0.0D) Var=’’或 Var=”” Var=Ptr_New() Var=Obj_New()long64() uint() ulong() ulong64() float() double() complex() dcomplex() string()至 10 -138308-10 至 10 -1 -10308至 10 -1308None None NoneIDL& var = 4B IDL& help,var VAR IDL& var = 256b var = 256 ^ Byte constant must be less than 256. IDL& var = 256 IDL& help,var VAR IDL& var = 256L IDL& help,var VAR IDL& var = 256LL IDL& help,var VAR IDL& var = 256. IDL& help,var VAR IDL& var = 256D IDL& help,var VAR IDL& var ='abcdef' IDL& help,var VAR IDL& var =&abc'def& IDL& help,var VAR IDL& var ='abc&def' IDL& help,var 第 25 页 STRING = 'abc'def' STRING = 'abcdef' DOUBLE = 256.00000 FLOAT = 256.000 LONG64 = 256 LONG = 256 INT = 256 BYTE = 4 IDL 培训教材 VAR IDL& print,var abc&def STRING = 'abc&def'3.1.1.3 类型转换 IDL 下的类型转换函数见表 3-2表 3-2类型转换 字节型 整型 无符号整型 长整型 无符号长整型 64 位长整型 无符号 64 位长整型 浮点型 双精度类型 复数类型 双精度复数类型 X 函数名称 BYTE FIX UINT LONG ULONG LONG64 ULONG64 FLOAT DOUBLE COMPLEX DCOMPLE变量类型转换操作及结果示例 操作 BYTE(1.2) FIX(2.5) UINT([5.5,-3]) LONG(65538.5) ULONG([5.5,-3]) LONG64([5.5,-3]) ULONG64([5.5,-3]) FLOAT([5.5,-3]) DOUBLE([5.5,-3]) COMPLEX(1, 2) DCOMPLEX(1, 2) 结果 1B 2 5 65533 -35 .00, (1.0000000, -3.000) 2.0000000)在进行数据的转换中需要注意转换后的数据的界限问题。如下面操作:IDL& A = 33000 IDL& B = FIX(A) ;B is silently truncated. IDL& PRINT, B -32536 出现这个错误是因为整型变量是16Bit的,最大值为32767。 IDL& b = 7b IDL& print,string(b) ? IDL& help,string(Fix(b)) &Expression& STRING =' 7'3.1.1.4 变量的特点 1) 动态性 IDL 在运行过程中能随时修改变量的数据类型和组织结构,这个特性给 IDL 的变量使用 带来了极大的便利。如: IDL&num = 6 IDL&num = num*5.2 ; num 是一个整型变量 ; num 变为一个浮点型变量变量 num 初始化为一个整数,经过数学运算重新赋值,它被动态地改变成浮点数值。这 是因为 IDL 在数学计算中为了保证高精度,将低精度的数据类型提升为高精度的数据类型。 当 num 被再赋值(在等号的左边) ,它被提升为一个浮点数去保持等号右边计算的精度。第 26 页 IDL 培训教材注意,下面这种情况下不进行类型转换。IDL& data = bytarr(3,3) IDL& help,data DATA IDL& print,data 1 0 0 4 0 0 2 0 0 BYTE = Array[3, 3] IDL& data[*,0] = [1,4,258]2) 整型变量精度 如果不注意,整型变量运算过程中会出现丢失精度的现象,看下面的例子: IDL& result=8/5 也许这个表达式的期望结果是 1.6,但结果却是 1。这种情况的发生是因为运算式右边的 两个数字为整数。当然,找到这个问题的原因并不难,但有时由整型数据导致的问题会更微 小,以致于难以发现。 例如:假如想知道 IDL 图形窗口的比率。窗口的大小(像素点或整数值)被储存在两个 系统变量中。会写出如下的 IDL 代码:IDL&aspect=!D.X_Size / !D.Y_Size可能需要花掉很长的时间来找为什么比率为零的错误。正确的方法是在进行除法运算时 时刻注意写出一些代码以强制将一个整数值变成一个浮点,如下:IDL&aspect=Float(!D.X_Size) / !D.Y_Size这样处理会后的比率就是一个所期望的浮点数了。3.1.2 系统变量IDL 系统中系统变量可以分为两种,一类是预定义系统变量,另一种是自定义的系统变 量,下面分别进行介绍。 3.1.2.1 预定义系统变量 在这里介绍几组常用的系统变量,在直接图形法(图形只可输出,不能进行交互操作) 输出中会常用到。 1) !d 系统变量 提供当前显示设备的信息。表 3-3 当前显示设备信息系统变量名 !d.name !d.n_colors !d.table_size !d.x_size !d.y_size !d.window 变量描述 当前图形设备的名称 当前图形设备使用的颜色数 当前分配的颜色表索引数 当前图形窗口的宽(象素) 当前图形窗口的高(象素) 当前图形窗口的索引号(没创建和打开图形窗口,值为1)2) !p 系统变量 更改默认的画图设置,此类系统变量包含如下系统变量:系统变量名 变量描述第 27 页 IDL 培训教材!p.color !p.charsize !p.linestyle !p.multi !p.position !p.psym !p.subtitle !p.title 画图的颜色索引 标签的字符大小 画线时的线性 指定在一个页面上画图的个数 指定在一个页面上画图的位置 在画图时所用的符号样式 副标题(显示在 x 轴下) 画图的标题3) !x,!y,!z 系统变量 更改在画图上坐标轴的默认属性,此类系统变量包含如下系统变量(如前述系统变量, 在前面加!x,!y,!z) :系统变量名 minor range tickbane ticks title 变量描述 在坐标轴上要显示的刻度数 设置坐标轴上显示数值的范围 为每个主刻度设置一个注记数组(一般是字符串) 坐标轴上显示的刻度段数 坐标轴的标题4)!CPUIDL& help,!cpu,/str ** Structure !CPU, 6 tags, length=24, data length=24: HW_VECTOR VECTOR_ENABLE HW_NCPU TPOOL_NTHREADS TPOOL_MIN_ELTS TPOOL_MAX_ELTS LONG LONG LONG LONG LONG LONG
2 2 0 05)!DIRSTRING ,/str = 'C:\Program Files\ITT\IDL70\bin\bin.x86;C:\Program Files\ITT\IDL'... = 'C:\Program Files\ITT\IDL70'IDL&help,!DIR ,/str &Expression&6)!DLM_PATHSTRINGIDL& help,!DLM_PATH &Expression&7)!EDIT_INPUTINT = 1IDL& help,!EDIT_INPUT ,/str &Expression&8)!HELP_PATHSTRING = 'C:\Program Files\ITT\IDL70\help'IDL& help,!HELP_PATH ,/str &Expression&9)!JOURNALLONG = 0IDL& help,!JOURNAL,/str &Expression&第 28 页 IDL 培训教材10)!MAKE_DLLIDL& help,!MAKE_DLL ,/str ** Structure !MAKE_DLL, 4 tags, length=48, data length=48: COMPILE_DIRECTORY STRING 'C:\Documents and Settings\Administrator\.idl\itt\compile_dir-1'... COMPILER_NAME STRING 'Microsoft Visual C++ 8.0' CC STRING 'cl %X -D_DLL -DMSWIN -DWIN32 -D_MT /nologo /I&C:\Program Files'... LD STRING 'link /out:%L /nologo /nodefaultlib /dll %O /def:%E &C:\Program'...11)!MOREINT = 1IDL& help,!MORE ,/str &Expression&12)!PATHIDL& help,!PATH ,/str &Expression& STRING = 'C:\Program Files\ITT\IDL70\lib\C:\Program Files\ITT\IDL70\'...13)!PROMPTSTRING = 'IDL& 'IDL& help,!PROMPT ,/str &Expression&14)!QUIETLONG = 0IDL& help,!QUIET ,/str &Expression&15)!VERSIONIDL& help,!VERSION ,/str ** Structure !VERSION, 8 tags, length=76, data length=76: ARCH OS OS_FAMILY OS_NAME RELEASE BUILD_DATE MEMORY_BITS FILE_OFFSET_BITS STRING STRING STRING STRING STRING STRING INT INT 'x86' 'Win32' 'Windows' 'Microsoft Windows' '7.0.1' 'Mar 20
643.1.2.2 自定义系统变量 自定义的系统变量的名字需要!+变量名,是可以修改的系统变量,生命周期为初始化至 程序的关闭。在使用中应尽量使之成只读变量而且要避免过多的使用,创建格式为: Defsysv,变量名,变量值,例如IDL& defsysv,'!sys_var',88 IDL& help,!sys_var &Expression& INT = 88第 29 页 IDL 培训教材3.2数组3.2.1 概述程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些 按序排列的同类数据元素的集合称为数组。IDL 是面向矩阵的第四代语言,对数组的维数为 0~8 维,在数组的处理时非常的灵活、高效。在后面详细的讲述中我们会了解到这些。而且 注意,IDL 中数组下标的顺序先是列标,后是行标。这正好与已习惯的线性代数中的矩阵或 行列式相反3.2.2 创建数组3.2.2.1 赋值创建 数组可以在 IDL 命令行中建立。建立一个两行三列的数组,如下所示:IDL& array=[[1,2,3],[4,5,6]] IDL& IDL& help,array ARRAY INT = Array[3, 2]3.2.2.2 函数创建 1.1.1.1.1 创建全零和索引数组1) 通用函数可以用 IDL 的通用函数进行全零数组或索引数组的创建,表 2-1 是常用的数据类型数组 的创建方式。表 3-4 不同类型的数组创建方式数据类型 字节型 16 位有符号整型 32 位有符号长整型 64 位有符号整型 16 位无符号整型 32 位无符号长整型 64 位无符号整型 浮点型 双精度浮点型 复数 双精度复数 字符串 指针 对象 创建全 0 数组 bytArr() intarr() lonarr() lon64arr() uintarr() ulongarr() ulon64arr() fltarr() dblarr() complexarr() dcomplexarr() strarr() ptrarr() objarr() 创建索引数组 bindgen() indgen() lindgen() l64indgen() uindgen() ulindgen() ul64indgen() findgen() dindgen() cindgen() dcindgen() sindgen()例如,创建 100× 100 初始值为零的字节型数组,输入:IDL&array=BytArr(100,100)创建一个有 100 个元素的浮点型矢量,初始数值为从 0 到 99,输入:IDL&vector=FIndGen(100)2) 常规函数第 30 页 IDL 培训教材MAKE_ARRAY()函数:是在程序运行过程中创建特定的数组。 调用格式为 Result = MAKE_ARRAY ( [D1 [, ..., D8]] [, /INDEX] [, DIMENSION = vector] [, /NOZERO] [, SIZE=vector] [, TYPE=type_code] [, VALUE=value] ) 通过关键字的控制可以实现表 2-1 的函数的功能。M = MAKE_ARRAY(3, 4, /INTEGER, VALUE = 5) IDL& help,m M IDL& print,m 5 5 5 5 5 5 5 5 5 5 5 5 INT = Array[3, 4]1.1.1.1.2创建特殊数组1) RANDOMU()函数RANDOMU 函数返回一个或多个均匀分布的浮点型数组,值在[0,1]之间。 Result = RANDOMU( Seed [, D1 [, ..., D8]] [ [, BINOMIAL=[trials, probability]] [, /DOUBLE] [, GAMMA=integer{&0}] [, /NORMAL] [, POISSON=value] [, /UNIFORM] | [, /LONG] ] ) 通过关键字的控制可以随机生成满足条件的随机数。2) RANDOMN()函数RANDOMN 函数返回一个或多个正态分布的浮点型数组, 这些数的平均为零, 标准偏差 为1 。 Result = RANDOMN( Seed [, D1 [, ..., D8]] [ [, BINOMIAL=[trials, probability]] [, /DOUBLE] [, GAMMA=integer{&0}] [, /NORMAL] [, POISSON=value] [, /UNIFORM] | [, /LONG] ] ) 通过关键字的控制可以随机生成满足条件的随机数。3.2.3 数组的存储IDL 中的矢量和数组均是以先行后列顺序存储的(IDL 最初是设计用来处理行扫描的卫星 数据),下标值的起始值是 0。 3.2.3.1 一维数组的存储 数组 arr[m]的存储方式: arr[0] → arr[1] →… → arr[m-1] 3.2.3.2 二维数组的存储 m*n 的数组 arr[m,n]的存储方式: arr[0,0] → arr[1,0] → arr[2,0]…arr[m-1,0] → arr[0,1] → arr[1,1] → arr[2,1]…arr[m-1,1] → … arr[0,n-1] → arr[1, n-1] → arr[2, n-1]…arr[m-1, n-1]IDL& array = indgen(4,3) IDL& print,array 0 1 2 3第 31 页 IDL 培训教材 4 8 5 9 6 10 7 113.2.3.3 三维数组存储 m*n*t 的数组 arr[m,n,t]的存储方式为 arr[0,0,0] → arr[1,0,0] → … → arr[n-1,0,0] arr[0,1,0] → arr[1,1,0] → … → arr[n-1,1,0]→ … … … arr[0,m-1,0]→ arr[1,m-1,0]→ … → arr[n-1,m-1,0] arr[0,0,1] → arr[1,0,1] → … → arr[n-1,0,1] arr[0,1,1] → arr[1,1,1] → … → arr[n-1,1,1] … … … arr[0,m-1,1]→ arr[1,m-1,1] → … → arr[n-1,m-1,1] … … … … … … arr[0,0,t-1] → arr[1,0,t-1] → … → arr[n-1,0,t-1] arr[0,1,t-1] → arr[1,1,t-1] → … → arr[n-1,1,t-1] … … … arr[0,m-1,t-1]→arr[1,m-1,t-1]→…→arr[n-1,m-1,t-1]IDL& arr = indgen(2,3,4) IDL& print,arr 0 2 4 6 8 10 12 14 16 18 20 22 1 3 5 7 9 11 13 15 17 19 21 233.2.4 使用数组3.2.4.1 下标方式 可以使用下标来存取该数组中的每一个元素。要知道数组元素是以行顺序存储的,所以 要获得数组中的第四个元素,可以:IDL&array = indgen(8)第 32 页 IDL 培训教材 IDL& print,array 0 4 1 2 3 4 5 6 7 IDL&Print, array[3]3.2.4.2 向量方式 倘若要存取数组中的第一,二,四和第六个元素,可键入:IDL&indices=[0,1,3,5] IDL&Print,array[indices] 0 1 3 53.2.4.3 子数组的提取 创建数组IDL&data = Indgen(20,30)需要取出第 6-10 列和第 12~15 行的数据,可键入:IDL&subarray = data[5:9,11:14] help,subarray SUBARRAY INT = Array[5, 4]要取出一个第 10 行的矢量,键入:IDL&vector = data[*,9]要提取出一个数据为数组中最后 5 行的数组,键入:IDL&subarray = data[*,25:29] IDL&Help, subarray SUBARRAY INT = Array[20, 5]可以看出子数组是一个 5 行 20 列的数组。3.2.5 运算3.2.5.1 数组运算 1.1.1.1.3 数组求大(&)、求小(&)和求余 数组的求大(&)、求小(&)和求余(mod)操作返回的是同维数组的计算结果。IDL& arr = indgen(4) IDL& print,arr 0 IDL& print,arr & 3 3 IDL& print,arr & 3 0 1 2 3 IDL& arr = indgen(6) IDL& print,arr mod 3 0 1 2 0 1 2 3 3 3 1 2 31.1.1.1.4 数组与数运算 数组与数的运算遵循的基本规律是,数组中的每一个元素与数发生运算关系。例如:IDL&A=IndGen(5) IDL&Print,A 第 33 页 IDL 培训教材 0 1 2 3 4IDL&B=A+2 IDL&Print,B 2 3 4 5 6 IDL&C=A*2 IDL&Print,C 0 2 4 6 8 IDL&D=A^2 IDL&Print,D 1 2 4 8 161.1.1.1.5 数组与数组运算 数组与数组的运算结果的元素个数与运算的最小数组个数一致。IDL& arr = [2,4,6,8] IDL& darr = [2,4] IDL& print,arr+darr 4 &Expression& IDL& darr = [2] IDL& print,arr*darr 4 IDL& help,arr*darr &Expression& IDL& darr = [2,4] IDL& help,arr*darr &Expression& 4 INT 16 = Array[2] IDL& print,arr*darr IDL& darr = [1,2,3] IDL& print,arr/darr 2 2 2 IDL& darr1 = [1,2,3,4] IDL& print,arr/darr1 2 2 2 2 INT = Array[1] 8 INT = Array[2] IDL& help,arr+darr3.2.5.2 相关函数 1.1.1.1.6 数组信息 Size() Size()函数能够返回数组的结构信息。 调用格式为 Result = SIZE(数组, [/KeyWords])。 如果不设置任何的关键字返回信息结构体,设置了关键字则返回对应的值, /N_DIMENSIONS , /N_ELEMENTS ,/DIMENSIONS , /TNAME, /TYPE: 依次返回数组的维数、 元素个数、每一维的维数、类型名称和类型代码信息。IDL& data = FindGen(6,6) IDL&help,size(data) 第 34 页 IDL 培训教材 &Expression& &Expression& &Expression& LONG LONG LONG = Array[5] = 36IDL&help,size(data,/N_Elements) IDL&help,size(data,/Dimensions) = Array[2]1.1.1.1.7 条件查找 Where() WHERE()函数返回满足指定条件(即数组表达式)数组元素的下标所组成的一维数组。 调用格式为 Result =WHERE(数组表达式 [, count] [, COMPLEMENT=变量 1] [, /L64] [, NCOMPLEMENT=变量 2])。 关键字:count 返回的是符合指定条件的个数; 变量 1 是不满足条件的数组的下表信息; 变量 2 是不满足条件的数组的个数;IDL& array = INDGEN(10) IDL& PRINT, 'array = ', array array = 0 1 2 3 4 5 6 7 8 9 IDL& B = WHERE(array GT 5, count, COMPLEMENT=B_C, NCOMPLEMENT=count_c) IDL& PRINT, count 4 IDL& PRINT, B 6 6 IDL& PRINT, B_C 0 1 2 3 4 5 7 8 9 IDL& PRINT, count_c1.1.1.1.8大小调整1) Reform()函数Reform()函数可以使数组在元素个数不修改的前提下,改变数组的维数,方便了数组的 动态使用。 调用格式为 Result = REFORM(Array, D1 [, ..., D8] [, 关键字] )IDL&a = Intarr(10,10,10) IDL&c = Reform(a,200,5) IDL&help,c C INT = Array[200, 5] IDL&d = Reform(a[0,*,*]) IDL&help,d D INT = Array[10, 10] IDL&e = Reform(a,[20,5]) % REFORM: New subscripts must not change the number elements in A. % Execution halted at: $MAIN$2) Rebin()函数Rebin()函数可以修改数组的维数大小, 将维数调整为 D1 [, ..., D8]指定的维数, 且大小必 须原数据的大小的整数倍,默认抽样算法是双线性内插。 调用格式为 Result = REBIN(数组, D1 [, ..., D8] [, /SAMPLE] )第 35 页 IDL 培训教材SAMPLE:设置该关键字则使用最近临值抽样法。IDL& arr = [[0,6],[2,8]] IDL& print,arr 0 2 0 1 2 2 0 0 2 2 6 8 3 4 5 5 0 0 2 2 6 7 8 8 6 6 8 8 6 7 8 8 6 6 8 8IDL& print,rebin(arr,4,4)IDL& print,rebin(arr,4,4,/sample)IDL& print,rebin(arr,3,4) % REBIN: Result dimensions must be integer factor of original dimensions % Execution halted at: $MAIN$3) Congrid()函数Congrid()函数可以调整数组为同维任意大小的数组,默认在处理一维或二维数组时默认 是最近邻重采样方式,处理三维数组时默认是双线性内插值。在数据缩小操作时,Rebin 做 了插值处理,而 Congrid 仅仅是重新采样。 调用格式为 Result =Congrid(数组, X,Y,Z [,关键字] ) INTERP:抽样采用线性内插法; CUBIC:采用卷积内插法;IDL& arr = [[0,6],[2,8]] IDL& print,arr 0 2 0 0 2 0 0 2 2 6 8 6 6 8 6 6 8 8 6 6 8 6 6 8 8IDL& print,congrid(arr,3,3)IDL& print,congrid(arr,3,4)4) EXPANDEXPAND 用来对二维数组进行大小修改,采用双线性内插算法。 格式为 EXPAND, A, Nx, Ny, Result [, FILLVAL=value] [, MAXVAL=value]第 36 页 IDL 培训教材其中 A 为源数组,Nx、Ny 为修改后的维数,Result 为修改后的数组,FILLVAL 是填充 数据,默认为-1;MAXVAL 是数据的最大值,大于该值的赋为 FILLVAL。 如:IDL& d = indgen(4,4) IDL& print,d 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15IDL& EXPAND, d, 5, 5, Result1 IDL& print,result1 0 3 6 9 12 IDL& print,result 0 3 6 -1 -1 0 3 6 -1 -1 1 4 7 -1 -1 -1 -1 2 5 -1 -1 -1 3 6 -1 0 3 6 9 12 1 4 7 10 13 2 5 8 11 14 3 6 9 12 15IDL& EXPAND, d, 5, 5, Result,MAXVAL=105) INTERPOLATE()函数INTERPOLATE ()函数可以调整数组为同维任意大小的数组,并能够任意定位插值点。 调用格式为 INTERPOLATE(数组, X [, Y [, Z]] [, 关键字] ) GRID 关键字:可以使数组的插值点按网格生成,否则按线性方式生成; Missing 关键字:如果插值点在当前数组外面时的值;IDL& print,arr 0..000 0..00 0..000 1.00 1.000 1.00 0..000 3.00 2.00 0...000000IDL& PRINT, INTERPOLATE(arr, [0, .5, 1.5], [0, .5, 1.5]) IDL& PRINT, INTERPOLATE(arr, [0, .5, 1.5], [0, .5, 1.5],/grid)IDL& PRINT, INTERPOLATE(arr, [0, .5, 1.5], [0, .5, 1.5],/grid,missing = 0)1.1.1.1.9 数组反转 Reverse() Reverse ()函数可以对数组进行反转。第 37 页 IDL 培训教材调用格式:result =Reverse (数组, index[, 关键字] ) index 是反转的数组的维数索引,它不能大于数组的维数。IDL& print,arr 0..00 3.00 0..00 0..00 1.00000IDL& print,reverse(arr,1) ;行反转IDL& print,reverse(arr,2) ;列反转1.1.1.1.10 数组转置 Transpose() Transpose ()函数可以对数组进行反转。 调用格式:result = Transpose (数组, [P] ) 关键字:P 是调整后的维数数组列表,如不设置则完全反转。IDL& arr = indgen(2,3,4) IDL& help,arr ARR &Expression& &Expression& &Expression& &Expression& INT INT INT INT INT = Array[2, 3, 4] = Array[4, 3, 2] = Array[2, 3, 4] = Array[2, 4, 3] = Array[4, 3, 2] IDL& help,transpose(arr) IDL& help,transpose(arr,[0,1,2]) IDL& help,transpose(arr,[0,2,1]) IDL& help,transpose(arr,[2,1,0])1.1.1.1.11 数组旋转1) Rotate()函数Rotate()函数可以以 90° 整倍数的角度对数组进行旋转操作。 调用格式:result = Rotate (数组,direction ) Direction:该关键字为整数,范围 0-7,分别代表的图像旋转方式见下表。Direction 0 1 2 3 4 5 6 7 是否转置 否 否 否 否 是 是 是 是 顺时针旋转角度 0 90° 180° 270° 0 90° 180° 270° 旋转后坐标 X1 X0 -Y0 -X0 Y0 Y0 -X0 -Y0 X0 旋转后坐标 Y1 Y0 X0 -Y0 -X0 X0 Y0 -X0 -Y0IDL& arr = indgen(2,3) IDL& print,arr 第 38 页 IDL 培训教材 0 2 4 0 2 4 4 5 5 3 1 IDL& print,arr 0 2 4 0 1 1 3 5 3 5 2 3 0 2 4 4 5 1 1 3 5 1 3 5 2 3 4 2 0 0 1IDL& print,rotate(arr,0)IDL& print,rotate(arr,1)IDL& print,rotate(arr,2)IDL& print,rotate(arr,4)IDL& print,rotate(arr,5)2) Rot()函数Rot ()函数可以以任意的角度对数组进行旋转操作并能进行放大、缩小操作。 调用格式:result = Rot (数组, Angle, [Mag, X0, Y0],[关键字] ) Angle:该关键字数组旋转地角度,单位为度(° )。 Mag:为放大的倍数; X0:为旋转中心的 X 坐标,默认为列中心; Y0:为旋转中心的 Y 坐标,默认为行中心; PIVOT:该关键字控制旋转后(X0,Y0)点是否仍然在原图像中的位置,不设置则(X0,Y0) 点在图像的中心位置。IDL& a = bytscl(dist(256)) IDL& tv,a IDL& B = ROT(A, 33, 1.5, /INTERP) IDL& tv,b1.1.1.1.12 数组平移 Shift() Shift()函数是按指定的平移量 S1、…、Sn,分别对数组的第 1、…、n 维进行平移后生成 新数组。其中 Si 为正表示向前平移;Si 为负表示向后平}

我要回帖

更多关于 envi idl 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信