我为何钟情于 IDL 语言
原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/what-i-love-about-the-idl-language
18721 给这篇文章评分:
5.0
我为何钟情于 IDL 语言
匿名作者 2014年10月2日,星期四
在上周的IDL Data Point专栏中,不仅描述了在IDL中执行任务是多么简单,还说明了IDL如何提供了不止一种完成任务的方法。
尽管有些方法比其他方法更高效,但有时我希望为一个小项目快速编写代码。如果我想要轻松处理或可视化某些数据而不费太多力气,IDL是一个极佳的工具。一旦代码写好,我可以用一些技巧进行调整,使其更高效。这很容易做到,因为在IDL工作台(IDL workbench)中,我可以通过快速点击按钮重新编译代码,而无需担心使用编译器。
这里有一个我刚刚想到的例子。给定怀俄明大学大气探空资料存档提供的大气探空数据(简单来说,这是从气象气球收集的数据),绘制相对湿度与高度的关系图。在该网站上,选择输出格式为"文本:列表",选择一个日期并点击一个地点。复制原始文本数据(忽略底部的标题和站点信息),并将其粘贴到一个纯文本文件中。
现在,我可以用10行IDL代码来读取和绘制这些数据:
file = dialog_pickfile()
nLines = File_Lines(file)
openr, unit, file, /GET_LUN
txtData = StrArr(nLines)
readf, unit ,txtData
Free_Lun, unit
data = (StrSplit(txtData, ' ', /EXTRACT)).ToArray()
height = Long(data[*,1]); 以米为单位的高度在第二列
rh = Long(data[*,4]); 相对湿度(百分比)在第五列
p = plot(rh, height, 'r1D-', TITLE='RH vs. Height', XTITLE='RH (%)', YTITLE='Height (m)')
运行代码时,会弹出一个对话框,让你选择你保存的文本文件。现在会显示一张图。

使用新的图形界面,我可以轻松地用一些文本和箭头来标注这张图。

你能想象在C语言或任何其他非解释型语言中做这件事吗?我不能。
让我们进行更多编程乐趣。我现在想知道在哪些高度可能多云。我将任意定义多云为相对湿度大于95%(可能有更科学的方法来确定空气是否多云,但RH > 95这个条件为实施一个非常简单的算法提供了示例)。以下是提供答案的另外几行代码:
result = Where(rh gt 95, count)
isCloudy = (count gt 0)
if (isCloudy) then begin
cloudLayers = height[result]
endif
print, isCloudy
print, cloudLayers
这展示了在IDL中设计和开发算法是多么容易。我甚至不需要担心声明变量类型——那是IDL的职责。但IDL的能力远不止代码和用户友好的绘图工具。IDL工作台(IDL workbench)提供了设置断点、创建项目、编写宏、查看类层次结构的能力,并且它还有一个新的JSON编辑器。这些仅仅是开发中可用工具的一部分。
此外,IDL是ENVI API所使用的语言,它允许用户为ENVI添加自定义扩展。这提供了用一种简单的语言来开发定制化图像处理算法的优势。
至于效率,这里有一个链接,指向我最喜欢的关于高效IDL编程技巧的参考资料:IDL高效编程技巧与窍门