ENVI/IDL与ArcGIS Engine一体化开发的实现
分享
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
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 个评论
相关问题
- 如何优雅的使用ArcGIS知乎?
- 建设ArcGIS知乎平台的目和意义?
- gis开发群的管理不讲理,求围观。
- ArcGIS知乎社区改进意见征集
- 【抽奖结果已出】ArcGIS知乎社区活动 之 你不知道的地理空间革命【转发分享有奖】【附奖品寄送照片】
- 苹果系统下可以使用arcgis 吗?
- 请问ArcGIS适合在局域网内用javaweb做二次开发吗?
- arcgis版本兼容性
- 安装完arcgis10.3后,为何没有Envi tools这个工具箱?
- 请问大神们,怎么用ArcGIS做城镇间经济联系强度的图?
- 在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?