王志成 zcwang@imagetekinfo.com 航天星图科技(北京)有限公司 使用IDL进行科学数据可视化 王志成 zcwang@imagetekinfo.com 航天星图科技(北京)有限公司
主要内容 IDL可视化方式的介绍 数据的读取 直接图形绘图 使用字体 直接图形绘图实例 使用iTools进行可视化 使用地图投影 应用程序的发布
一、IDL可视化方式介绍 直接图形系统 iTools智能工具 对象图形系统
直接图形系统 速度快 编程简单 交互性较差 与具体硬件设备相关,可移植性差 适合初学者编写简单的应用程序
iTools 无需编写程序 具有6类不同的可视化工具 能够进行高级的交互和可视化 定制化差 不一定能够解决所有的可视化问题 适合不想编程,而又需要对数据进行可视化的用户
对象图形系统 基于面向对象的编程方法 交互式强 能够编写功能强大的应用系统 与硬件设备无关 编程较复杂 适合编写大型或工程化的应用程序
二、数据的读取 文件的确定 通过对话框选择文件dialog_pickfile() 通过搜索的方式进行选择: File_search() 测试文件是否存在:File_test() 打开图像文件:dialog_read_image() 写图像文件:dialog_write_image()
这些号通过Get_Lun和Free_Lun命令获取和管理 二、数据的读取 逻辑设备号(LUN) 在IDL中所有文件输出和输入都是在一个逻辑设备号上完成的。一个Open命令的作用是将一个特定的文件(通过其文件名来指定)和一个逻辑设备号相关联。逻辑设备号可被分为三类。 逻辑设备号 用途 0,-1,-2 标准输入、标准输出、标准错误窗口 1-99 这些号可以在Open命令中用户直接使用 100-128 这些号通过Get_Lun和Free_Lun命令获取和管理
二、数据的读取 文件打开的方式 文件的关闭 OPENR 打开文件进行读 OPENW 打开文件进行写 OPENU 打开文件进行更新(读/写) OpenR,lun,filename,/get_lun 文件的关闭 Close,lun Free_lun,lun
二、数据的读取 文件单元号的控制 刷新文件单元:Flush 定位:Point_lun 文件是否结束:EOF(lun)
二、数据的读取 读/写自由格式文件 ASCII_template() read_ascii() ReadF ReadS PrintF
二、数据的读取 读取自由格式文件的规则 如果读入到字符串变量中,那么,在当前行剩下的所有字符都将读入该变量中。 输入数据必须用逗号或空白分隔(空格键或tab键) 输入通过数字变量完成。数组和结构都可作为数字变量的集合
二、数据的读取 读取自由文件的规则 如果当前读入行是空的,并且还有变量要求输入,则读取另一行 如果当前读入行不是空的,但是没有变量要求输入,则忽略此行剩下的数 尽量将数据转换为变量所希望的数据类型 复数数据必须有实数和虚数两部分,用逗号分隔,并用括号括起来
二、数据的读取 读/写二进制数据文件 Readu Writeu 指针位置的定位:Point_lun Read_binary() 读写具有文件头的二进制文件
二、数据的读取 使用关联变量读取二进制文件 IDL关联变量是把一个IDL数组或结构变量的组织结构映射到数据文件的内容上。 文件被看作是这些重复单元的一个数组。 第一个单元的索引号是0,第二个单元的索引号1等等。 关联变量不象常规变量那样将整个数据组都存储在内存里。而是当一关联变量被引用时,IDL仅对需要的部分数据执行相关的输入或输出请求,这部分数据就是要读入内存的。
二、数据的读取 关联变量的优点 当该变量被用于表达式时,才产生文件的输入和输出动作。不需要单独的读或写命令。 数据集的大小不受内存容量的限制,因为有时它可处理大型的数据集。对于物理存储器来说是太大的数据,通过把此数据分成块就能很容易地处理 不必提前声明用于映射该数据的数组或结构的数量 关联变量是效率最高的I/O形式
二、数据的读取 特定格式的文件读取 Read_bmp、read_GIF、read_JPEG、Read_PICT、Read_PNG、Read_TIFF、Read_Wave、DICOM HDF、netCDF、CDF
三、避免循环,提高效率 避免循环 使用Where函数 > 和 < 运算符 # 和##运算符
三、避免循环,提高效率 提高效率 以内存顺序访问数组 减少内存的使用 减少数组运算
四、直接图形绘图 直接图形绘图支持的图形设备 设备名称 描述 设备类型 WIN Windows 显示器显示 MAC MAC OS X 图形设备的切换set_plot 设备名称 描述 设备类型 WIN Windows 显示器显示 MAC MAC OS X X Window Z Z-Buffer 内存 PS PostScript 文件 PRINTER 打印机
四、直接图形绘图 颜色模式 索引颜色(8位) 真彩色(24位) 最多支持256色 相对应于一个颜色表 所有的IDL设备都支持 每个像素的颜色由红、绿、蓝各自的强度混合而成 支持16777216色 不需颜色表
四、直接图形绘图 颜色表 IDL内置了41中颜色表 使用XLOADCT、LOADCT加载颜色表 使用TVLCT、XPALETTE进行颜色表的修改 自定义颜色表
四、直接图形绘图 IDL坐标系统 数据坐标系统 设备坐标系统 是指与数据范围相对应的窗口坐标系统。该系统可以是二维的或者三维的,也可以是线型的、对数的、或者半对数的。该坐标系统是系统默认的坐标系统。 设备坐标系统 显示设备的实际坐标系统。设备坐标是整数,范围从显示设备的左下角(0,0),到右上角(Vx -1,Vy -1)。Vx和Vy是显示设备的列和行的分辨率。
四、直接图形绘图 IDL坐标系统 归一化坐标系统 当前图形窗口或设备的左下角坐标为(0.0,0.0),右上角的坐标为(1.0,1.0)。 归一化坐标非常有用,用户使用归一化坐标可以指定不依赖于当前图形窗口或设备大小和形状的位置。
五、在可视化中使用字体 IDL中字体的种类 Hershey(Vector)字体: IDL提供的,与设备无关的字体,线型字体,无填充,中等质量 TrueType字体 常用的字体形式,绝大多数与设备无关,填充方式显示,高质量 设备(hardware)字体: 与设备相关,不同的平台字体形式不一致,包括PostScript字体,字体质量取决于设备
五、在可视化中使用字体 在直接图形系统中使用字体 !P.FONT系统变量
五、在可视化中使用字体 使用Hershey Vector字体 将!P.FONT系统变量设置为-1 或是在绘图程序中将FONT关键字设为-1
五、在可视化中使用字体 使用True Type字体 将!P.FONT系统变量设置为1 或是在绘图程序中将FONT关键字设为1 使用 DEVICE,SET_FONT=‘楷体’,/tt_font,选择合适的TrueType字体
五、在可视化中使用字体 使用自定义的True Type字体 将字体文件拷贝到IDL安装目录下的bin/resource/tt/目录中 编辑True Type字体的资源文件ttfont.map文件
五、在可视化中使用字体 IDL查找TrueType字体的方式 首先查找ttfont.map文件和bin/resource/font/tt目录 Unix平台下不在查找,使用Helvetica Windows平台查找系统目录的FONT目录 使用 device,get_fontnames=fontNames,set_font=‘*’
五、在可视化中使用字体 改变字体的大小 Hershey和TrueType字体使用 DEVICE SET_CHARACTER_SIZE 关键字 使用绘图程序的CHARSIZE关键字
六、直接图形绘图实例 常用直接图形命令 绘线:PLOT,OPLOT,PLOTS 绘坐标轴:AXIS 绘制文本:XYOUTS 绘制等值线:COUNTOUR 绘制网格面:SURFACE 绘制阴影表面:SHADE_SURF 显示影像:TV,TVSCL
六、直接图形绘图实例 绘制动画 PIXMAP XINTERANIMATE
七、iTools可视化 iTools介绍 自从IDL6.0开始提供,包含一系列的内建的可视化工具 具有所见即所得的编辑分析环境,以及内建的大量可视化工具 IDL6.2具有6类iTOOLS:iPlot、iImage、iMap、iContour、iVolume、iSurface
八、使用地图投影 IDL支持的地图投影方式 Aitoff Hammer-Aitoff Orthographic Albers Equal Area Lambert’s Conformal Conic Robinson Pseudo-Cylindrical Azimuthal Equidistant Lambert’s Azimuthal Equal Area Satellite Cylindrical Equidistant Mercator Sinusoidal Gnomonic Miller Cylindrical Stereographic Goode’s Homolosine Mollweide Transverse Mercator
八、使用地图投影 MAP_SET程序 设定指定的投影:map_set,/orthographic 设定投影的中心:map_set,lat,lon,/orthographic,/grid,/continents 设置投影区域:map_set,lat,lon,/orthographic,/grid,/continents,limit=[20,-160,80,-40]
八、使用地图投影 使用IDL提供的地图数据 IDL提供了高精度和低精度的全球矢量数据,这两套数据都可以通过Map_continents程序访问 Map_continents的关键字 COASTS COLOR COUNTRIES FILL_CONTINENTS HIRES RIVERS USA
八、使用地图投影 在指定投影上显示数据 使用Wrap_image程序将数据集和指定的投影结合 使用Wrap_patch程序将数据集与指定的投影结合
九、应用程序的发布 单个文件的发布 编译该文件:.COMPILE 提取依赖函数:RESOLVE_ALL 生成save文件:save,’routineName’,filename=‘routineName.sav’,/routines
九、应用程序的发布 多个pro文件的发布 工程管理器进行文件的管理 使用工程进行编译和发布 可以选择发布的类型
九、应用程序的发布 IDL SAVE文件 与平台无关的二进制文件 可以包含程序和数据以及内存中的内容 如果save文件保存的是数据,可以使用restore将其恢复到内存中 可以用于不同平台直接进行数据交换
九、应用程序的发布 IDL Virtual Machine 可以从RSI的网站上免费获得 能够发布绝大多数IDL应用程序 具有以下限制: SAVE文件必须是IDL6.0以上的版本编译的 不支持使用IDL_EXECUTE(绝大数情况下,可以使用CALL_FUNCTION或CALL_PROCEDURE代替) 不支持IDLDrawWidget控件的使用
九、应用程序的发布 Runtime License 能够运行各种IDL应用程序 必须提供Runtime或Embedded License 具有以下限制: 在错误处理时,不支持ON_ERROR,可以使用CATCH代替
九、应用程序的发布 应用程序的定制 修改IDL.pref文件进行定制 IDL_WINRT_FILE:设定调用的save文件名称 IDL_WINRT_FILE_TYPE:设定应用程序的类型 IDL_WINRT_ICON:为应用程序设定图标 其它属性定制:IDL_CPU_TPOOL_NTHREADS:2
九、应用程序的发布 基于IDL ActiveX Control的应用程序安装 必须将IDL目录下\bin\bin.x86\idldrawx3.ocx文件拷贝到C:\windows\system32目录下 必须注册idldrawx3.ocx文件: regsvr32 idldrawx3.ocx