【IDL】IDL 8.4 新特性介绍

发表于 2014-10-21


       IDL 8.4于2014年10月15日正式发布。此版本中新增了许多实用的功能和工具,比如数据读取与可视化、新增数据类型等。而且IDL正向着更加现代化的语言发展,比如函数程序设计(Functional Programming)、静态类和方法等。除此之外,IDL工作台本身也变得更加人性化。主要改进如下:

  • 数据读取
  • 图形可视化
  • 数据分析
  • 数据类型
  • 语言更新

1. 数据读取

  • HDF5 函数库

       更新提供对压缩格式SZIP (v2.1) 的只读支持。

  • 视频读取增强

       在之前版本中,使用 IDL 读取 FFmpeg 时会弹出错误消息,并且 IDLffVideoRead 对象初始化失败。在 IDL 8.4 版本中,如果视频或音频编码不支持时,IDL 将自动忽略并继续打开视频文件。用户可以使用新的 VERBOSE 关键字来强制 IDL 弹出错误消息提示。

  • 支持输出Geospatial PDF

       新增 IDLffGeospatialPDF 类,提供了输出图形为 Geospatial PDF 文件的功能。

2. 图形可视化

  • 新增获取代码方法

       在快速可视化中,新增 GenerateCode 方法,可以获取当前图形可视化显示风格的源代码。比如,我们可以手动修改可视化窗口中的注记、对象属性、字体、颜色、坐标轴等,然后调用 GenerateCode 方法获取当前窗口风格的源代码,从而进行重复使用。可以选择是否保存当前窗口中可视化的数据。

       示例如下,在一个窗口中绘制了一条曲线和一个柱状图。然后调用GenerateCode方法将源码输出到本地pro文件中,使用savedata关键字可保存数据到同名sav文件中。

IDL> p = PLOT(/TEST, THICK=3, COLOR='red', LAYOUT=[2,1,1])
IDL> b = BARPLOT(/TEST, FILL_COLOR='green', LAYOUT=[2,1,2], /CURRENT)
IDL> p.generateCode, 'D:\temp\mycode.pro', /savedata

       自动获取的代码如下:

  • IDLgrAxis 增强

       新增 TICKUNITS = "numeric" 和 TICKUNITS = "scientific" 两种坐标轴显示风格。

  • ERRORPLOT 新增两个属性

       ERRORBAR_LINESTYLE —— 控制 Error Bars 的线型

       ERRORBAR_THICK —— 控制 Error Bars 的线宽

  • 可视化窗口工具条

       新版 IDL 中,快速可视化窗口中新增无工具条的选项。

  • 图形输出更加平滑

       在调用 Save 和 CopyWindow 方法时,IDL 将使用反锯齿得到一个更加平滑的图像结果。

3. 数据分析

  • 新增 ALOG2 函数

       可以计算以2为底的对数。

  • FFT_POWERSPECTRUM 函数

       可以计算输入数组的傅立叶功率谱,并提供了源代码。

  • GAUSSINT 函数增强

       更新后 GAUSSINT 函数可以接收二维数组了。

4. 数据类型

  • Big Integers

       BIGINTEGER 类可以创建和操作任意大小的整型数字(例如大于64-bits的),并且可以和其他数据类型进行简单的数学计算。

IDL> b = BigInteger(2)^1279
IDL> help, b
B BIGINTEGER = 1.0407932194664400...x10^385
  • Booleans

       BOOLEAN 变量只包含了两个值:0和1,分别代表 False 和 True。

IDL> a = [0.0, 1.0, 0.0, 3.0]
IDL> b = BOOLEAN(a)
IDL> print, b
 0 1 0 1
IDL> print, json_serialize(b)
 [false,true,false,true]
  • Attributes

       可以直接所有 IDL 变量来获取其属性,比如DIM、LENGTH、NDIM、TNAME、TYPECODE、TYPENAME等。

IDL> s = findgen(3,4)
IDL> s.DIM
 3 4
IDL> s.NDIM
 2
IDL> s.LENGTH
 12
IDL> s.TYPENAME
 FLOAT
  • 静态方法(Static Method)

       现在可以使用 IDL 变量来调用指定的静态方法,提供了更现代的面向对象编程方法。

       IDL 变量支持的静态方法:

       String 字符串支持的静态方法:

       Number 数值支持的静态方法:

       Integer 整型支持的静态方法:

       Pointer 指针支持的静态方法:

       例如:

IDL> arr = [1.0:5]
IDL> arr
 1.0000000 2.0000000 3.0000000 4.0000000 5.0000000
IDL> arr.Ceil()
 1 2 3 4 5
IDL> arr.Max()
 5.0000000
IDL> arr.Mean()
 3.0000000
IDL> arr.Product()
 120.00000000000000

5. 语言更新

  • 文件夹监视系统

       新增的 FOLDERWATCH 类可以监视文件夹的变化,或当文件夹发生变化时调用用户自定义的回调函数。

这样用户就可以编写一个批处理,使用 FOLDERWATCH 监视一个指定文件夹,当文件夹内发生预想的变化时(如新增文件、文件修改或删除等),继续执行下面的处理。

       如下代码,实现了监视'D:\temp\'文件夹的功能,并使用回调函数MyCallback在IDL工作台打印文件修改状态。

       当我在监视文件夹删除和重命名某个文件时,IDL控制台提示如下:

  • 函数程序设计(Functional Programming)

       IDL 开始支持函数程序设计,类似其他编程语言。现在可以创建简单的 inline routines 用于函数编程。这些 Lambda 程序可以与这些方法搭配使用,如::Filter、::Map、::Reduce;也可以作为单独的函数或过程来调用。

       这里有几个示例:

IDL> ;求var的平方根
IDL> var = [0:4]
IDL> PRINT, var.Map(LAMBDA(n: sqrt(n)))
 0.000000 1.00000 1.41421 1.73205 2.00000
 
IDL> ;利用Filter函数求得区间内的素数
IDL> var = [2:50]
IDL> lam = LAMBDA(n:n le 3 || MIN(n mod [2:FIX(SQRT(n))]))
IDL> newvar = var.Filter(lam)
IDL> PRINT, newvar
 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
  • 代码覆盖范围

       新增 CODE_COVERAGE 函数,可以帮助 IDL 用户高亮显示执行和未执行的代码行。并整合到了IDL 工作台中,比如编辑器和剖析工具(Profiler)中。

       在IDL编辑器中编写如下函数,并保存编译。

       可以使用code_coverage函数获取执行和未执行的行号:

       同时可以打开"窗口 > 剖析工具",单击如下图的按钮,即可在IDL编辑器中使用不同颜色高亮显示代码运行情况,如绿色为执行的代码行。

  • TIMER 类改进

       TIMER 类新增两个方法:Block 和 Unblock。新版 IDL 不会自动中断回调。

  • ARRAY_EQUAL 函数改进

       新增 NOT_EQUAL 关键字,可以逆转结果。

       新增 QUIET 关键字,可以抑制所有数据类型转化时遇到的错误。

  • 新增 NOSAVE编译选项

       如果一个程序被标记了 COMPILE_OPT NOSAVE,那么将不会编译到IDL .sav文件中。

  • HASH、ORDEREDHASH、JSON_PARSE 新增 FOLD_CASE 关键字。
  • IDL_Container 类新增存储指针功能。

  • LIST 数据类型更新

       List::Sort 方法增加一种可选的比较算法进行元素的排序;

       List::Add 方法进行了优化,性能提高。

  • 图形支持Unicode字符,最多8个十六进制数字。
  • ISA 函数新增COMPLEX、FLOAT、INTEGER、STRING关键字。

  • JSON_SERIALIZE 功能改进

       当使用 JSON_SERIALIZE 转换 IDL 结构体时,可以设置 LOWERCASE 关键字,这样可以使得 JSON 字符串结果中的 Tag Names 为小写。

       新版 JSON_SERIALIZE 转换字节型数值为整型时,不会将非0值的字节型全部转换为ture了,保证数据不会丢失。

  • 库更新

       cURL 库更新到版本 7.36.0*

       OpenSSL 库更新到版本 1.0.1g*

       注:IDL 8.4 将是最后一个包含 Live Tools 函数的版本。在 IDL 8.4 之后的版本中将不再提供。

posted @ 2022-06-15 09:40  ENVI-IDL技术殿堂  阅读(147)  评论(0编辑  收藏  举报