ENVI二次开发解决方案


ENVI是使用IDL语言编写的完整遥感图像处理平台,架构非常灵活,提供一个功能全面的函数库(API),可以满足用户的个性化需求。

在ENVI中,用户可以很方便的通过IDL语言以及ENVI提供的二次开发工具对ENVI的功能进行扩展,添加新的功能函数,甚至开发独立ENVI界面的全新系统,也可以与第三方主流开发语言集成开发,如C++.NETJava

ENVI/IDL提供的遥感二次开发功能可选择以下三种途径实现:

1.ENVI功能扩展

1)自定义函数

自定义函数是用IDL编写以实现某一个功能的代码,该函数可以在波段和波谱运算、基于专家知识决策分类器、波谱分析等工具中使用。

2)自定义功能

自定义功能也称为ENVI扩展补丁,它是嵌在ENVI上的功能模块,具备交互式操作界面和相应处理功能的函数,以完成某一方面的功能。

当然,ENVI功能扩展范围比较广,这只是两个比较常用的方式。

2.ENVI二次开发

ENVI二次开发是在ENVI已有的API之上,借助IDL开发独立于ENVI界面的业务化平台。大部分ENVI平台的图像处理功能都以函数方式(ENVI Routines)提供,IDL可以很方便的调用这些函数,同时IDL本身具有开发GUI的功能。这样我们就可以很方便的基于ENVI+IDL开发一个业务程度很高的平台,完全“扔掉”ENVI的界面和操作方式。

3.集成开发

集成开发是将IDL与其他开发语言混合编程,可以充分发挥各自的优点。如伽利略系统仿真设施(GSSF),就是将IDL编写的数据可视化组件嵌入.net开发环境中。有时候为了降低开发风险、减少开发量、提高开发效率,选择两个二次开发平台,如ArcGIS与ENVI/IDL,实现系统一体化集成开发,实现真正的GIS与遥感的一体化集成。

为了实现与其他语言的集成开发,IDL拥有以下几个技术:

1) 调用外部程序

IDL调用其他语言功能的最简单的方法就是调用外部程序,即使用SPAWN方式。SPAWN产生一个子进程来执行一个命令或一系列的命令,调用时可以根据需要添加一系列关键字。

2)调用COM组件

IDL可以调用微软的组件对象模型(COM)和ActiveX控件,通过这种方式可对IDL进行功能扩展。具体实现是通过IDLcomIDispatch类实现com组件的调用,通过IDLcomActiveX类实现ActiveX控件的调用。

3) 调用Java类对象

通过IDL-Java bridge方法可以直接访问Java对象。

4)CALL_EXTERNAL方法

CALL_EXTERNAL方法是调用其他语言创建的动态库,需要先创建动态库,在IDL中创建与VC函数中定义的数据结构相匹配的数据结构;利用过程MAKE_DLL编译VC的函数和程序,生成在IDL中可以使用的动态连接库DLL;最后利用函数CALL_EXTERNAL通过动态连接库调用VC的函数。

5) DLM方式

DLM是IDL的功能扩展,DLM是通过C、C++等编译器建立的一个动态库(DLL)和一个DLM的ASCII文件。IDL启动时可自动加载并记录该ASCII文件中进行函数或类的调用定义方式,这种方式的调用跟调用IDL自身的功能函数一样。该方式比普通的DLL动态库调用更灵活方便,可以与IDL进行无缝集成。

6) Callable技术

ENVI/IDL函数可以作为动态链接库被外部程序调用启动,称之为Callable IDL技术。使用Callable IDL技术,外部程序可以像在IDL环境中一样执行IDL的代码。

7)IDLDrawWidget和COM_IDL_Bridge技术

这两个方式都是基于COM组件的,使用跟Callable技术类似,其中IDLDrawWidget可以在其他语言框架下创建IDL的显示Draw组件,使得该技术非常适合用于在框架下进行ENVI/IDL 的可视化展示;而COM_IDL_Bridge则是非常完善的提供了ENVI/IDL 现有功能调用的支持。