跳转至

我为何钟情于 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高效编程技巧与窍门

将前沿部署的GEOINT作为服务加以利用 LSST照亮通往数据驱动发现前沿的道路