经济高效地将遗留 IDL 桌面应用程序转换为企业应用程序
16829 为本文评分:
4.6
经济高效地将遗留 IDL 桌面应用程序转换为企业应用程序
Jim Pendleton 2021年9月17日 星期五
将您的 IDL® 应用程序移植到企业或基于云的系统可能看起来很艰巨。实际上,使用 IDL 编程语言,这个过程相当简单直接。本篇博客将描述如何使用您的 IDL 许可证来创建后端应用程序,以及如何使用 IDL 虚拟机(或在运行环境中使用 IDL 运行时许可证)来分发 IDL 前端客户端。我还将介绍使用 IDL 任务(Task)框架来开发可以通过带有 IDL 后端的 Web 应用程序访问的代码。
大多数人认为企业应用程序等同于客户端(前端)使用 Web 浏览器、服务器端(后端)具有核心业务逻辑模块的集成系统,但这只是部分正确。虽然企业应用程序的前端在 Web 浏览器中运行非常普遍,但它并不一定非要如此。事实上,如果您没有 Web 开发人员,这可能是执行服务器端任务的一种极好方式。只要支持 HTTP/HTTPS 协议并且可以进行 RESTful API 调用,前端就可以在 Java、C/C++、Python 等环境中运行。这些也都可以在 IDL 中运行。
我们以图像质量度量工具包(IQMT)为例。IQMT 是 NV5 Geospatial 提供的用于从单波段图像计算标准图像质量度量并分配国家图像可判读性等级量表(NIIRS)值的工具。它是使用 ENVI® API 开发的桌面应用程序,可以以向导/交互模式以及批处理模式运行。该工具可用于数据中心处理传入的图像,以确定每个下行链路图像的质量是否满足客户交付所需的 NIIRS 等级要求。
IQMT 使用 ENVI 函数进行图像处理和分析计算,但输入向导和输出显示不一定依赖于 ENVI。因此,我们可以将 IQMT 的核心和计算密集型函数修改为 ENVI 或 IDL 任务,并将它们部署在 GSF(Geospatial Services Framework)上作为后端。前端,作为输入向导和输出显示,通过后端服务器使用 RESTful API 调用与 GSF 上的这些 IQMT 任务进行交互。
例如,IQMT 的边缘识别和 RER(相对边缘响应)计算已被转换成一个 IDL 任务 CalculateEdgeRERTask,并部署在 GSF 上。设置了一个目录监视服务器来监控图像文件的到达,并请求 CalculateEdgeRERTask 在新图像文件到达时自动开始处理。
要在 Web 浏览器中运行前端,例如,在本地设置了一个运行在 http://localhost:3000 的测试性 node.js Web 服务器,每三秒更新一次,并等待 CalculateEdgeRERTask 的执行结果。当图像到达并由 CalculateEdgeRERTask 处理后,表格行会自动增加并填充结果。

图 1. Web 浏览器显示初始状态,并在图像到达并由服务器自动处理后显示更新后的结果。
相比之下,要在 IDL 中运行前端,则无需设置 Web 服务器。IDL 客户端直接与 GSF 服务器通信,其行为与基于 Web 浏览器的客户端类似,并显示相同的内容(图 2)。

图 2. IDL 客户端显示初始状态,并在图像到达并由服务器自动处理后显示更新后的结果。
尽管运行良好且达到了目的,但大多数人可能会指出,使用 IDL 客户端需要许可证。开发 IDL 应用程序(IDL 任务以及 IDL 客户端)确实需要许可证。但是,使用 IDL 虚拟机 运行的 IDL 客户端则不需要。为此,终端用户可以下载 IDL 客户端的 .sav 文件,并在任何可以与后端服务器通信的机器上免费使用它。
需要注意的是,IDL VM 确实有一个启动画面需要关闭。对于不希望有启动画面的用户(例如用于关键的业务运行),IDL 运行时许可证可以移除启动画面,并且允许用户使用 IDL 的 'execute' 函数来调用外部代码。
总而言之,要开发代码——前端用户界面或后端处理——您需要一个 IDL 许可证。要免费运行代码,您需要创建一个 .sav 文件,并由终端用户下载虚拟机。如果要在应用程序中分发许可证,或者用户不希望关闭启动画面,或者如果您需要调用外部代码,则需要 IDL 运行时许可证。对于需要运行时的广泛分发的业务应用程序,您的 IDL 客户经理可以洽谈批量定价。
让我们看另一个例子。以下是 NV5 Geospatial 为澳大利亚气象局海啸(AusBOM)决策支持工具(DST)构建 IDL 用户界面(UI)和分析工具的一个项目。AusBOM DST 在业务上用于评估海啸是否可能袭击澳大利亚或印度洋地区。如果评估认为海啸可能发生,DST 会汇总必要信息并生成适当的预警。
NV5 Geospatial 解决方案交付团队支持了此应用程序的原始开发,然后在 DST 需求发展时提供升级和服务支持。更多信息可在文章 "IDL 编程语言是澳大利亚海啸决策工具的引擎" 中找到。

图 3. 在训练模式下使用的 DST (v11.1),用于评估由新西兰南岛西海岸发生的 8.6 级地震引起的对澳大利亚的海啸威胁。
如图 3 所示,DST 的 IDL 用户界面具有许多服务于业务工作流程的功能。每次部署新版本时,AusBOM 的 DST 用户都需要重新培训。如果 DST 迁移到企业环境并采用基于浏览器的客户端(注意:这只是一个想法,并不暗示气象局对此有任何倾向),其用户界面应具备与桌面用户界面非常相似的功能。一个原型示例如图 4 所示。尽管 DST 的核心功能可以被修改为在后端服务器上工作的 IDL 任务,但基于 Web 的客户端需要从头开始开发,并且需要为 DST 设置一个地图服务器以作为 Web 应用程序运行。
或者,未来的企业版 DST 可以采用 IDL 客户端,它将拥有与当前业务使用中几乎相同外观和感觉的用户界面。IDL 客户端本身可以像桌面版 DST 一样显示与地图相关的信息。无需设置地图服务器。但是,后端需要增加一个数据库服务器。这样可以避免本地文件写入,例如目前桌面版 DST 中实现的将事件日志写入 JSON 文件(原型示例如图 5 所示),以及将预警传输日志写入 .sav 文件。
这一变更是 DST 转向企业环境必须完成的事项之一。它将最终管理同步事件日志、公告计数器和产品生成,以支持多个用户同时使用 DST。目前在桌面版 DST 中,同步是通过文件锁定以及将本地文件与远程文件合并来处理的,这可以应对偶尔有两个用户同时使用 DST 的情况。
当然,要让 IDL 客户端在任何机器上成功运行,可能还需要解决其他问题。NV5 解决方案交付团队可以支持评估和执行代码更改。对于喜欢自己动手的用户,在线文档和技术支持可能提供资源来对原始的 IDL 应用程序进行必要的更改。
在后端,在 GSF 上运行 IDL 或 ENVI 任务确实需要许可证。如果 IDL 客户端用户数量增加导致性能下降,您可能需要通过在多个节点上运行任务(每个节点需要一个许可证)来扩展 GSF,这超出了本文的范围。有关 GSF 的更多信息可以 在此找到。
在结束本主题之前,让我们回顾一下。在将遗留的 IDL 桌面应用程序转换为企业应用程序时,值得考虑将 IDL 客户端用户界面作为一个选项。为此使用 IDL 用户界面的主要原因是:
- 在 IDL 虚拟机中运行 IDL 客户端不需要许可证。
- 桌面应用程序代码的很大一部分很可能可以在其企业版本的开发中重用。
- 应用程序用户的培训成本可能会低得多,因为应用程序的用户界面可能保持不变。前端用户可能不会注意到任何变化。
- 如果日后基于浏览器的客户端用户界面变得必要,替换 IDL 客户端应该很容易,因为后端的 GSF 上不需要做任何更改。

图 4. 企业版 DST 基于浏览器用户界面的原型示例。

图 5. 在 DST 事件日志的 JSON 文件被 MySQL 数据库表替换后,企业版 DST 的 IDL 客户端用户界面原型示例。
IDL 任务框架最终可以轻松地将遗留代码转换为通过 GSF 和 Web 服务器访问。IDL 客户端可以免费或以最低成本分发,以访问桌面或虚拟桌面上的后端应用程序。如果您想开发 Web 应用程序,可以重用相同的代码,从而节省为不同环境重新架构工作代码的时间。随着数据量的增加、云存储使用的增长,以及对桌面分析代码需要迁移到服务器环境的需求,IDL 具有灵活的"按需配置"能力,以满足您的需求和预算。
探索更多
ENVI 深度学习模块

自动化分析
利用深度学习自动化分析,实现快速、准确的结果。
ENVI & IDL 新功能网络研讨会

录制的网络研讨会
ENVI 5.6.1 和 IDL 8.8.1 引入了许多新颖、激动人心且具有影响力的新功能!
ENVI 和 IDL 的开源技术

录制的网络研讨会
探索使用 ENVI + IDL 与开源技术相结合的新颖方式
解锁 Landsat 9 的新可能性