ENVI/IDL与ArcGIS Engine一体化开发的实现

0
分享 2016-06-09

ENVI (The Environment for Visualizing Images)和IDL(Interactive Data Language)是美国ITT VIS公司的旗舰产品,是由遥感领域的科学家采用IDL开发的一套功能强大的遥感图像处理软件。其软件处理技术覆盖了图像数据的输入/输出、定标、几何校正、正射校正、图像融合、镶嵌、裁剪、图像增强、图像解译、图像分类、基于知识的决策树分类、面向对象图像分类、动态监测、矢量处理、DEM提取及地形分析、雷达数据处理、制图、三维场景构建、与GIS的整合,提供了专业可靠的波谱分析工具和高光谱分析工具。ENVI软件几乎可支持所有的UNIX系统,Mac OS X,Linux,以及PC机的Windows XP/ Vista/7/Server2008等操作系统。
ENVI具有丰富的函数接口API,完整的示例代码帮助文档。ArcGIS Engine是一套完备的嵌入式GIS 组件库和工具库,即是一个用于开发新应用程序的二次开发功能组件包。开发者可以选择集成开发环境来建立 ArcGIS Engine 应用程序,而同时开发环境又可以集成ENVI/IDL的功能,这样使得开发一个遥感与GIS一体化的程序变得非常的容易。下面以ArcGIS Engine10.0和ENVI4.8为例,开发一个一体化的示例程序。
1. 新建项目
启动Visual Studio2008,项目类型选择Visual C#-ArcGIS-Extending ArcObjects,模版选择MapControl Application,解决方案设置为ArcGISEngineUsingENVI(图1.1)


图1.1 新建项目
2. 添加引用
在解决方案的“引用”上单击右键,弹出菜单中选择[添加引用](图2.1),在添加引用界面中,选择COM界面列表中的COM_IDL_connectLib1.0 Type Library(图2.2),如果安装了多个IDL版本可能会存在多个同名的组件。



图2.1 项目添加引用

图2.2 选择COM_IDL_CONNECT组件
同样方式添加“ESRI.ArcGIS.DataSourceRaster”和“ESRI.ArcGIS.Geodatabase”组件(图2.3)。

图2.3 添加相关引用
3. 代码编写
1) C#代码
在解决方案的MapForm.cs中,最上面引用部分,添加引用代码。

添加新菜单[栅格预处理]-[重采样](图3.1),双击[重采样]编写代码。


图3.1 添加重采样功能菜单
继续编写该按钮功能中调用的OpenRaster函数。

2) IDL代码
IDL的功能代码以对象类的方式调用了重采样功能,其中ENVI的初始化和重采样分别是类的两个方法。

4. 运行项目
按F5或对解决方案进行调试运行,点击菜单[栅格预处理]-[重采样],先后选择待处理栅格文件和定义采用后输出文件名,程序调用ENVI重采样函数进行重采样处理(图4.1),并将处理前后栅格文件显示在左侧图层列表中(图4.2)。

图4.1 AE中调用ENVI的重采样功能

图4.2 重采样前后对比
5. 组件方法与参数传递
1) 概述
COM_IDL_CONNECT组件提供的方法见下表。


组件与C#进行数据传递的基本数据类型见下表。

2) 应用示例
>>>界面创建
在“UsingCOM_IDL_CONNECT”的基础上,新添加一按钮,属性参数中设置Name为“exchange”,Text为“参数传递”(图5.1)。

图5.1 添加“参数传递”按钮
>>>代码编写
将IDL下对变量和数组进行处理的函数复制到当前C#工程的Debug目录下。




双击界面中的“参数传递”按钮来编写操作代码,具体如下。



运行项目后点击按钮“参数传递”,依次弹出界面(图5.2和图5.3)。

图5.2变量传递测试

图5.3数组传递测试
Ø 分析
添加断点,程序运行到最后,在局部变量界面中对比dataarr、objArr和objArrOri三个变量的区别(图5.4)。


图5.4 C#中数组与IDL中获取的数组


文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0100s4a8.html

0 个评论

要回复文章请先登录注册