IDL 培训教程
Esri 中国(北京)有限公司
2011 年
IDL 培训教材
2
1 前言 ........................................................................................................................... 1
1.1 为什么要编程.................................................................................................. 1
1.2 为什么要学 IDL .............................................................................................. 1
IDL 的优势 ...................................................................................................... 1
1.3
1.4 可利用资源 ..................................................................................................... 2
1.5 说明 ................................................................................................................ 2
IDL 的使用 ................................................................................................................ 3
IDL 的安装 ...................................................................................................... 3
2.1
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
IDL 的路径管理 ................................................................................... 16
2.3.8
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
IDL 程序 .............................................................................................. 22
2.5.4
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
3
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
;注释符............................................................................................... 60
3.10.3
IDL 培训教材
4
IDL 编程基础 ........................................................................................................... 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
IDL 高效编程 ................................................................................................. 69
4.6
4.6.1 释放内存 ............................................................................................. 70
4.6.2 优化运行时间 ..................................................................................... 70
5 输入与输出 .............................................................................................................. 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
iTools 界面 ..................................................................................................... 86
6.1
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
6
IDL 培训教材
6.3.2 Widget_Info .......................................................................................... 94
6.4 事件的处理 ................................................................................................... 94
6.4.1 事件的结构 ......................................................................................... 95
6.4.2 事件的“管家” ...................................................................................... 95
6.4.3 事件的处理 ......................................................................................... 95
7 直接图形法 .............................................................................................................. 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
8
IDL 培训教材
9
9.3
8.9.4 峰值检测 ...........................................................................................120
8.9.5 分水岭边界检测 ................................................................................120
8.9.6 图像识别 ...........................................................................................120
8.9.7 图像的梯度边界检测.........................................................................120
8.9.8 图像细化 ...........................................................................................121
8.9.9 图像分割 ...........................................................................................121
IDL 对象图形法 .....................................................................................................122
9.1 对象层次结构..............................................................................................122
9.2 对象基本操作..............................................................................................122
9.2.1 创建对象 ...........................................................................................122
9.2.2 方法调用 ...........................................................................................122
9.2.3 销毁对象 ...........................................................................................122
IDL 图形基本对象 .......................................................................................123
IDLgrWindow 对象 .............................................................................123
9.3.1
IDLgrView 对象 .................................................................................123
9.3.2
IDLgrModel 对象 ...............................................................................125
9.3.3
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
iTools 概述 .................................................................................................139
iTools 的使用 ..............................................................................................139
11.2.1 数据导入和导出 ..............................................................................139
11.1
11.2
IDL 培训教材
12.1
13.1
12.2
11.2.2 数据和对象属性的查看 ...................................................................144
11.2.3 显示操作 .........................................................................................145
11.2.4 添加标注 .........................................................................................146
11.2.5 公共操作 .........................................................................................147
iPlot 使用..........................................................................................147
11.2.6
iContour 使用 ...................................................................................148
11.2.7
iImage 使用 ......................................................................................149
11.2.8
iMap 使用 .........................................................................................155
11.2.9
iSurface 使用 ..................................................................................159
11.2.10
iVolume 使用 ..................................................................................164
11.2.11
iVector 使用 ....................................................................................165
11.2.12
11.3 开发 ..........................................................................................................167
12 IDL 程序的部署与发布 ..........................................................................................168
IDL 的部署 .................................................................................................168
12.1.1 Runtime 许可发布 ............................................................................168
12.1.2 虚拟机免费发布 ..............................................................................168
IDL 的发布 .................................................................................................168
12.2.1 Sav 文件 ...........................................................................................168
12.2.2 可执行文件(Windows 下的 exe) ..................................................169
12.2.3 COM 和 JAVA ..................................................................................172
13 混合调用 ................................................................................................................173
IDL 功能扩展 .............................................................................................173
13.1.1 直接调用 SPAWN ............................................................................173
IDL 调用 ActiveX .............................................................................173
13.1.2
IDL 调用 DLL ..................................................................................178
13.1.3
IDL 使用 DLM .................................................................................180
13.1.4
13.2 其他语言与 IDL ........................................................................................185
13.2.1 对象输出助手 ..................................................................................185
IDLDrawWidget 组件........................................................................193
13.2.2
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 常用关键字及函数 ..........................................................................212
14.3.3 文件管理函数 ..................................................................................213
14.3.4 打开文件函数 ..................................................................................213
14.3.5 获取数据函数 ..................................................................................214
14.3.6 感兴趣区函数 ..................................................................................214
14.3.7 数据保存函数 ..................................................................................214
14.3.8 实例编写 .........................................................................................216