IDL 9.1新特性

IDL 9.1版本具有以下新增功能和更新:

新增功能:

  • Windows 小部件的深色模式
  • 球谐变换
  • GAUSS_QUAD_LEGENDRE 功能
  • 读取和转换 float16/binary16 半精度浮点数
  • 命令行进度条
  • IDL_HASHVAR 功能
  • 新的 SVG 图标
  • RENDER_SVG 功能
  • RENDER_ICON 功能
  • SVG_ICON_BROWSER 例程

更新功能:

  • VS Code 的 IDL 扩展
  • HDF5 可以处理空数组
  • HttpRequest 进度条
  • IDL_String::replace 新的 Count 参数
  • 对 NaN 和 Infinity 值的 JSON 支持
  • LEGEND 填充颜色
  • MapContinents Shapefile
  • 多行工具提示
  • PRINT/PRINTF 新的 NEWLINE 关键字
  • Shapefile 增强
  • TS_SMOOTH新的 NAN 关键字
  • WIDGET_BROWSER 支持
  • WIDGET_LABEL 和 WIDGET_TEXT 文本和背景颜色
  • WIDGET_PROPERTYSHEET Top Header 关键字
  • WIDGET_TEXT 对齐关键字
  • WIDGET_TEXT FRAME = 0
  • WRITE_PNG 压缩关键字
  • Dataminer 安装

1        新功能

1.1      Windows 小部件的深色模式

在 Windows 上,IDL 小部件现在支持深色模式主题。您可以使用新的 IDL 首选项IDL_THEME 更改小部件主题,该首选项可以设置为 0 表示浅色模式(默认),设置为 1 表示深色模式。可以使用 IDL Workbench 中的首选项对话框或使用 PREF_SET 例程来设置主题首选项。新的只读系统变量 !THEME允许您确定首选项的当前值。

一些一般说明:

  • 在 Windows 上,所有 IDL 小部件应用程序(包括 ENVI)都将遵循主题设置。
  • 如果您更改主题,则必须重新启动 IDL 才能使更改生效。
  • IDL 小组件主题独立于 Windows 系统主题设置。
  • IDL Workbench 有自己的主题设置,与此设置无关。
  • 直接图形窗口和对象图形窗口中的图形不受影响。
  • Linux 和 Mac 平台将默认忽略主题首选项,并始终使用浅色模式。

1.2      球谐变换

IDL 现在具有用于执行正向和逆向球谐变换的内置函数。

SPHERE_HARM_FORWARD 函数使用 Gauss-Legendre 算法来计算球面坐标网格上二维输入数组的正向球面谐波变换。SPHERE_HARM_INVERSE 函数计算逆向球谐变换,并在球面坐标网格上返回结果。正向变换和逆向变换都是用 C 代码编写的,并且是多线程的,以实现最佳性能。

球谐变换是在全球数据集上分析波型的有用工具,广泛用于气象学和海洋学,以及地磁场和太阳磁场的研究。正向和逆向变换对于应用频谱滤波器也很有用。在这种情况下,执行正向变换,然后对频谱系数应用滤波函数,之后执行逆变换。

除了转换函数之外,IDL 现在还有两个新例程:SPHERE_HARM_FILTER 和 SPHERE_HARM_KERNEL。这些例程可用于对球面数据集进行光谱过滤,以保持波数长于特定阈值。

例如,这里我们加载一些 1884 年 12 月 1 日的气温数据,然后计算 T63 截断:

restore, filepath('reanl20v3_1dec1884_512x256dbl.sav', $
  subdir=['examples', 'data'])
T63 = sphere_harm_filter(A, 63)
im = image(A, rgb_table = 75, layout=[1, 2, 1], $
  dim=[550, 580], min = -30, max = 30)
im = image(T63, rgb_table = 75, /current, $
  layout=[1, 2, 2])

这些例程基于 Mark Miesch、Marc DeRosa 和 Gilbert P. Compo 编写的原始变换和过滤例程,并经许可使用。有关更详细的示例以及数据来源和参考,请参阅 SPHERE_HARM_FORWARD。

1.3      GAUSS_QUAD_LEGENDRE 功能

新的 GAUSS_QUAD_LEGENDRE 函数计算高斯正交积分的 x 值(横坐标)和加权系数,其中 x 值是 N 阶勒让德多项式(Legendre polynomial)的根。GAUSS_QUAD_LEGENDRE基于剑桥大学出版社出版的 Numerical Recipes in C: The Art of Scientific Computing(第二版)第 4.5 节中描述的gauleg例程,并经许可使用。

1.4      读取和转换 float16/binary16 半精度浮点数

半精度浮点数的长度为 16 位,而单精度浮点数的长度为 32 位,双精度浮点数的长度为 64 位。这些数字的标准格式称为 float16(或 binary16),基于 IEEE 754 标准。尽管 IDL 没有原生支持16 位浮点数,但 IDL 现在可以读取和转换 float16 数字。READ_BINARY 函数有一个新的 FLOAT16 关键字,它会自动从文件中读取 float16 数字并将其转换为 32 位浮点数。此外,您还可以使用新的 FLOAT16_DECODE 和 FLOAT16_ENCODE 函数将 16 位无符号整数(float16 格式)与 32 位浮点数相互转换。

例如:

a = uint([0, 1, 0x8001, 0x3ff, 0x3c00, 0xbc00, 0x7bff, 0x7c00, 0xfc00, 0x7fff])
b = float16_decode(a)
help, b
print, b

IDL 打印:

B    FLOAT  =  Array[10]
0.00000   5.96046e-08   -5.96046e-08   6.09756e-05   1.00000   -1.00000   65504.0   Inf   -Inf   NaN

现在转换回来:

c = float16_encode(b)
help, c
print, c, format='(10z)'

IDL 打印:

C    UINT  =  Array[10]
0   1   8001   3ff   3c00   bc00   7bff   7c00   fc00   7fff

有关详细信息,请参阅 FLOAT16_DECODE、FLOAT16_ENCODE 和 READ_BINARY。

1.5      命令行进度条

新的 CLI_Progress 类在 IDL Workbench 控制台中或在终端中运行 IDL 时实现命令行进度条。例如:

length = 1000 ; for example, file length in bytes
cli_progress.initialize, title = 'Download', maximum = length, /remaining
for i=0,length do begin & $
  cli_progress.update, i & $
  wait,0.01 & $
endfor

在这里,进度条将从 0% 缓慢前进到 100%,类似于:

Download  46% [##################----------------------] 6m:27s

CLI_Progress 类具有用于控制条宽、字符、剩余时间以及标题和文本消息的选项。您还可以构建一个“乒乓”选取框进度条,其中进度指示器沿进度条来回弹跳。例如:

CLI_Progress.Initialize, ping_pong = !true, complete_char = "<IDL>"
for i = 0,114 do begin & $
  CLI_Progress.Update & $
  wait, 0.02 & $
endfor

<IDL> 这个词来回跳动:

[-----------------------------------<IDL>-----]

有关更多信息,请参阅 CLI_Progress 或访问 CLI_Progress 示例页面。

1.6      IDL_HASHVAR 功能

IDL 有一个新的 IDL_HASHVAR 函数,该函数接受任何 IDL 变量并返回表示该值的标量 32 位哈希代码。IDL_HASHVAR 函数用于创建简单的哈希码值,可用于将任意值转换为具有均匀分布的 32 位(四字节)哈希码。它还可以用于确定两个字符串是否相同,因为字符串中的微小差异(例如单个字符)将产生完全不同的哈希值。有关更多详细信息,请参阅 IDL_HASHVAR。

1.7      新的 SVG 图标

IDL 现在附带了 Font Awesome 项目中的 2000 多个新图标。这些图标可以在 IDL 发行版的以下目录中找到:

<IDL_DIR>/resource/bitmaps/svg/brands

<IDL_DIR>/resource/bitmaps/svg/regular

<IDL_DIR>/resource/bitmaps/svg/solid

您可以使用新SVG_ICON_BROWSER显示所有图标,也可以使用新的 RENDER_ICON 和 RENDER_SVG 函数来访问它们。所有这些图标均根据 Creative Commons Attribution 4.0 International License 分发,可以在您自己的应用程序中自由使用。

1.8      RENDER_SVG 功能

IDL 具有一个新的 RENDER_SVG 函数,该函数可以将 SVG 文件渲染为具有可选输出大小、背景色和前景色的位图图像。例如:

file = filepath('folder-open.svg', subdir=['resource', 'bitmaps', 'svg', 'regular'])
img = RENDER_SVG(file, width=128, height=128, background=0xCCCCCC, foreground=0xFF0000)
help, img
i = image(img)

IDL 打印:

IMG BYTE = Array[128, 128, 3]

1.9      RENDER_ICON 功能

IDL 具有一个新的 RENDER_ICON 函数,可从 IDL 中的 SVG 文件创建图标。例如:

w = widget_base(/row)
icon = RENDER_ICON("folder-open")
w1 = widget_base(w)
wb = widget_button(w1, value=icon, /bitmap)
icon = RENDER_ICON("folder-open", width=32, height=32)
w1 = widget_base(w)
wb = widget_button(w1, value=icon, /bitmap)
icon = RENDER_ICON("folder-open", width=64, height=64)
w1 = widget_base(w)
wb = widget_button(w1, value=icon, /bitmap)
widget_control, w, /realize

1.10  SVG_ICON_BROWSER 例程

IDL 增加了一个新的 SVG_ICON_BROWSER 例程,用于显示 IDL 附带的所有 2000+ 图标的缩略图。浏览器有一个过滤器,还会显示各个图标的示例代码,以及快速查看该图标在各种窗口小部件类型中的显示方式。有关详细信息,请参阅 SVG_ICON_BROWSER。

2        功能更新

2.1      VS Code 的 IDL 扩展

IDL 现在拥有了一个新的现代化开发环境,可在 Visual Studio Code 中免费使用。可以从 VS Code 扩展页面轻松下载和安装 VSCode 扩展的 IDL。该扩展具有以下功能:

  • 功能齐全的 IDL 代码编辑器,具有变量类型检测、自动完成、色彩编码、问题报告和代码格式化功能。
  • 带有断点的集成调试器,或在 VS Code 终端中运行命令行 IDL。
  • 支持 IDL Notebook 风格的界面,带有嵌入式图形并保存为 PDF。
  • 可定制的主题和颜色。
  • 悬停帮助包含完整的 IDL 文档,包括代码示例。
  • 为 SAVE 文件或 DLM 中的例程创建例程定义文档。
  • 原生多语言支持。

有关详细信息,请访问 VSCode 的 IDL 页面。

2.2      HDF5 可以处理空数组

H5D_READ 和 H5_GETDATA 例程现在可以处理具有零长度数组的 H5T_VLEN 数据类型。在这些情况下,结果是指向 !NULL 变量。

2.3      HttpRequest 进度条

HttpRequest 类(在 IDL 9.0 中引入)现在在 ::Get、::Post 和 ::Put 方法上有一个可选的进度条。此进度条使用上述新CLI_Progress条。有关详细信息,请参阅 HttpRequest::Get、HttpRequest::Post 和 HttpRequest::Put。

2.4      IDL_String::replace 新的 Count 参数

IDL_String Replace 方法现在具有新的可选 Count 参数。该参数允许您指定要替换的匹配项数量。默认值是替换所有匹配项。例如:

IDL> str = '.......'
IDL> print, str.replace('.', '*', 3)
***....

还可以指定一个负计数,从字符串的末尾开始:

IDL> str = '.......'
IDL> print, str.replace('.', '*', -3)
....***

有关更多详细信息,请参阅 IDL_String::Replace。

2.5      对 NaN 和 Infinity 值的 JSON 支持

IDL 的 JSON_PARSE 函数现在支持数组中的末尾逗号以及特殊的 NaN、Inf 和 Infinity(不带引号)值。这些都是对 JSON 规范的非标准补充,但提供了与 Python 和其他生成 JSON 工具更好的互操作性。

此外,JSON_SERIALIZE 现在有一个新的 NANINF_LITERAL 关键字。默认行为是将 NaN 和 Infinity 值输出为带引号的字符串,这遵循 JSON 规范,但不允许将它们转换回浮点值。设置 NANINF_LITERAL 关键字将输出这些值,但不带引号。这允许 JSON_PARSE 和其他工具(如 Python)理解这些值并返回浮点 NaN 和 Infinity 值。

2.6      LEGEND 填充颜色

现在可以指定 LEGEND 图形函数的填充颜色:

p = plot(/test)
l = legend(target=p, fill_color='yellow')

有关详细信息,请参阅 LEGEND。

2.7      MapContinents Shapefile

MapContinents 图形功能已更新,包含适用于各大洲、国家/地区、湖泊、岛屿和河流的更多最新 shapefile,包括适用于各大洲、湖泊和河流的新高分辨率版本。例如:

m0 = Map('Geographic', limit=[41, -93, 50, -83], margin=[0.1, 0.1, 0.1, 0.05])
m0.mapgrid.label_position = 0
m0.mapgrid.linestyle = "none"
m0.mapgrid.grid_longitude = 2
m0.mapgrid.grid_latitude = 2
m1 = MapContinents(/hires, fill_color="light green")
m2 = MapContinents(/lakes, /hires, fill_color='light blue', linestyle=0)
m3 = MapContinents(/islands, fill_color='green')
m4 = MapContinents(/rivers, /hires, color='blue', thick = 2)

2.8      多行工具提示

IDL 小组件现在支持跨多行的工具提示。要创建多行工具提示,只需在设置 TOOLTIP 关键字时嵌入换行符 \n 即可。有关详细信息,请参阅 WIDGET_BUTTON、WIDGET_DRAW 或 WIDGET_TREE 上的 TOOLTIP 关键字。

2.9      PRINT/PRINTF 新的 NEWLINE 关键字

PRINT 和 PRINTF 过程具有新的 NEWLINE 关键字。默认值为 1,与以前一样在输出末尾输出换行符(\n)。设置 NEWLINE=0 将隐藏换行符,并允许您多次调用 PRINT 并使所有输出都出现在同一行上。

2.10  Shapefile 增强

IDLffShape 类使用的 Shapefile 库已更新到最新版本。此外,IDLffShape 现在可以处理 Date 和 Logical 属性类型。您还可以使用新属性检索所有属性的 Shapefile 类型。有关详细信息,请参阅 IDLffShape。

2.11  TS_SMOOTH新的 NAN 关键字

TS_SMOOTH 函数具有新的 NAN 关键字。设置此关键字可使例程检查输入数据中是否出现 IEEE 浮点值 NaN 或 Infinity。值为 NaN 或 Infinity 的元素被视为缺失数据。因此,例程会将这些缺失的元素替换为平滑窗口内有效点的平滑值(使用简单的 Boxcar 平滑)。

2.12  WIDGET_BROWSER 支持

WIDGET_BROWSER 已更新为包含对 macOS 的支持。

2.13  WIDGET_LABEL 和 WIDGET_TEXT 文本和背景颜色

WIDGET_LABEL 和 WIDGET_TEXT 现在支持 FOREGROUND_COLOR 和 BACKGROUND_COLOR 关键字,这些关键字允许您设置文本颜色和背景文本框颜色。您还可以使用 WIDGET_CONTROL 动态更改这些属性。例如,保存并运行以下代码:

pro widtext_ex_change, ev
  common _widtext, w1, w2
  widget_control, w1, foreground_color=bytscl(randomu(s,3)), background_color=bytscl(randomu(s,3))
  widget_control, w2, foreground_color=bytscl(randomu(s,3)), background_color=bytscl(randomu(s,3))
end
pro widtext_ex
  common _widtext, w1, w2
  w = widget_base(xsize = 200, /column)
  w0 = widget_base(w, /row)
  f = 'Segoe*24'
  w1 = widget_label(w0, value='Label', foreground_color=[0,200,0], background_color=[255,255,0], font=f, scr_xsize=100)
  w2 = widget_text(w0, value='My Text', /editable, foreground_color=[200,0,0], background_color=[0,255,255], font=f)
  w0 = widget_base(w, /row)
  wbutton = widget_button(w0, value='Change', event_pro = 'widtext_ex_change', font=f)
  widget_control, w, /realize
  xmanager,'widtext_ex', w, /no_block
end

2.14  WIDGET_PROPERTYSHEET Top Header 关键字

WIDGET_PROPERTYSHEET 有一个新的 TOP_HEADER 关键字,当该关键字设置为 0 时,将隐藏顶部(列)标题。

2.15  WIDGET_TEXT 对齐关键字

WIDGET_TEXT 有 6 个新的对齐关键词:

  • ALIGN_BOTTOM、ALIGN_CENTER、ALIGN_LEFT、ALIGN_RIGHT 和 ALIGN_TOP 关键字控制小部件在其父部件中的位置。这些关键字在所有平台上都是允许的。默认值为 ALIGN_CENTER。
  • 新的 ALIGNMENT 关键字允许您设置文本对齐方式。此关键字可用于Windows平台,但在其他平台上将被静默忽略。

2.16  WIDGET_TEXT FRAME = 0

在 Windows 上,WIDGET_TEXT现在可以设置 FRAME=0 以删除文本构件周围的边框。在其他平台上,文本小部件始终具有框架,设置 FRAME=0 将不起作用。

2.17  WRITE_PNG 压缩关键字

WRITE_PNG 函数具有一个新的 COMPRESSION 关键字,该关键字允许您控制 PNG 输出的压缩量。该值必须在 0 到 9 的范围内。值为 0 表示无压缩。较高的值将提供较小的文件,但写入和读取的速度会变慢。默认值为 6,这在压缩和速度之间提供了良好的平衡。

2.18  Dataminer 安装

Dataminer 模块现在默认与 IDL 一起安装。它仍然需要许可证才能使用。Dataminer 支持读取和连接到 Microsoft Excel、PostgreSQL 和许多其他数据库管理系统。

3        库更新

第三方库已更新到以下版本:

  • ArmPL 24.04
  • CEF 121.3.7 for Windows and Mac. To support Red Hat-based systems (Fedora, CentOS, and Rocky Linux). Linux uses CEF 99.2.14.
  • antlr 2.7.7
  • curl 8.9.0
  • Eclipse CVS Client 1.4.2000.v20211124-1800
  • eclipse-egit-plugin 6.7.0.202309050840-r
  • eclipse-platform 4.29.0.v20230903-1000
  • Eclipse Temurin JDK 21.0.2
  • Eclipse Temurin JRE 21.0.2
  • HDF5 1.14.3
  • Inno Setup 6.2.2(u)
  • jackson-json-processor 2.15.2
  • ibtiff 4.6.0t
  • Libxml2 2.13.3
  • microsoft-vcredist 14.40.33810
  • mongo-c-driver 1.27.0
  • mongo-cxx-driver 3.10.1
  • nghttp2 1.62.1
  • NumPy 1.24.4
  • NumPy 1.26.4
  • OpenSSL 3.3.1
  • P4Eclipse 2023.1.2516406
  • poco 1.13.3
  • Python 3.12.4
  • shapelib 1.6.0
  • SQLite 3.46.0
  • x11-dev-tools 1.0.2
  • X PixMap Library 3.5.17
  • xerces-c 3.2.5
  • zlib 1.3.1

添加了以下第三方库:

  • Eclipse JGit 6.7.0.202309050840-r
  • libtirpc 1.3.4
  • LunaSVG 2.3.9

以下第三方库已被删除:

  • HASP Sentinel-LDK_SDK
posted @ 2024-10-21 17:54  ENVI-IDL技术殿堂  阅读(139)  评论(0编辑  收藏  举报