遥感与地理信息系统联合开发(IDL&C#)

前言

遥感和地理信息系统是两个相互独立发展的技术领域,两者在各自的应用范围都发挥着重要的作用,而又在交叉的领域存在着千丝万缕的联系,有研究人员试想将两种技术融合,必能在影像获取和数据处理方面获得很大的进展。一方面遥感能够为地理信息系统提供数据来源,另一方面地理信息系统能够为遥感提供空间数据的处理分析功能。

本博客基于组件式的二次开发。基于IDL调用ENVI软件处理影像的函数接口,使用IDL完成了核心算法的编写。基于ArcEngine中丰富的GIS函数处理接口,使用ArcEngine搭建框架;将ArcEngine与IDL结合,取二者的优点,基于二者成熟的二次开发平台,能够缩短开发周期。

一、常见的RS与GIS开发模式

(1)独立开发

独立方式是指开发人员使用一种编程语言,如:C、C++、C#、JAVA等,在计算机的语言环境中,完成空间数据的获取、编辑、分析、存储等一系列GIS中可供使用的功能,而并不依赖于某种商用的GIS软件。独立开发的优点在于其独立性,无需购买任何商用的GIS软件,节约了资金,开发出的产品具有一定的安全性。开发者从程序设计阶段可以从各个方面对系统进行控制,保证组件之间的紧密联系。但这种方法对开发人员的编程能力要求较高,同时时间、物力、财力也受限。

(2)单纯的二次开发

单纯的二次开发是指完全借助GIS工具软件提供的语言进行应用型GIS开发 。目前大多数商用GIS软件提供可供二次开发使用的宏语言。如ESRI公司提供了Arc Macro Language(AML),Arc View提供了Avenue语言。这些宏语言非常易于开发者编写GIS相关的应用程序,但是也存在着一些不足:宏语言的依赖性强,需要依托原GIS的平台。使用该语言编写的程序需购买商用GIS作为开发平台,增加了开发成本。另外,宏语言存在着一定的局限性。宏语言毕竟是小众语言,需要开发者学习其语法,开发出来的产品也不利于后期维护。

(3)基于组件的二次开发

基于现有的大多数商用GIS和RS软件都具备强大的空间数据处理分析功能,并且都提供了商业化的组件,如ArcEngine、MapObjects等,利用这些组件,开发者可进行二次开发,降低了编程难度,方便快捷地根据需求建立自己的GIS系统。这种开发方式以其可靠性、可移植性及易于维护的优点成为众多开发者的首选。

二、IDL 特点

IDL语言拥有灵便的数据读取分析、可视化表达和完善的信号分析功能,集成了图形用户界面工具包、数学分析与统计软件包、与ODBC兼容的数据连接工具包。支持交互式二维和三维可视化技术和跨大型应用开发等。

主要具有如下特点:

(1)语法简单易写

IDL语言是第四代计算机语言,与其他语言具有很多相似之处,掌握了其他的编程语言即能很快掌握IDL语言的语法,简单易上手。

(2)支持丰富的数据格式

IDL支持常见的图像数据格式,通用的图像数据格式如:JPEG、JPEG2000、BMP、GIF、PNG、DCM和TIFF/GeoTIFF等;NASA和NOAA(美国国家海洋局和大气管理局)等机构使用的CDF、HDF、HDF5和NCDF;以及其他格式:Binary、DXF、ASCII、WAV等大量格式。

(3)强大的数据分析功能

IDL中集成了大量用以数学计算和分析的函数功能,可以直接调用,采用了多进程设计,处理速度快。

(4)多样的可视化功能

IDL可以绘制二维图形、三维表面、三维体和等值线图等图形,提供了大量的可视化工具。智能化的绘图工具使得用户无需编写任何代码即能满足可视化需求。

(5)自带地图工具

IDL中提供了三十多种投影类型的地图转化功能,方便对地理坐标数据和遥感数据的处理。

(6)灵活的外部语言接口

IDL支持动态模块的加载,具备调用Windows控件、DLL代码和Java代码等功能。方便在其他系统中集成。

三、 ArcEngine开发技术

ArcGIS 9推出了ArcEngine产品,一个完整的嵌入式的GIS组件库,用于将AcrGIS软件的功能集成到其他应用软件中。ArcEngine包括两种产品:一是ArcEngine开发包(ArcEngineDeveloper Kit),包含了开发者建立解决方案所需的组件和工具集;另一个是ArcEngine运行库(ArcEngine Runtime),用以运行定制的ArcEngine应用程序所需的运行环境。

AcrEngine是由一套核心的ArcObject包组成,能够在各种接口中调用,对象与平台无关。ArcEngine开发包括:控件、工具和对象库。

(1)控件

AcrEngine的控件是用于建立高质量地图用户接口的可视化开发控件,可以通过两种方式建立应用程序:其一是,将AcrEngine控件嵌入到现有的应用程序中增加制图功能。其二是,使用AcrEngine控件创建新的独立的GIS应用程序。AcrEngine控件是嵌入式组件,可以任意添加到编译环境的窗口对话框中去,开发者能够访问AcrEngine控件的属性菜单项。常用控件:

MapControl——地图控件,用于地图数据的可视化显示

PageLayoutControl——地图输出控件

ToolbarControl——工具栏控件,提供了包括工具条、命令、菜单和状态界面组件

SymbologyControl——可以自定义图层符号选择器

TOCControl——图层管理控件,用以显示地图、图层和符号体系内容的交互树状视图并保持和其内容的同步性

(2)工具

工具在应用程序中,用以实现和地理信息的交互。如放大、缩小、查询等操作。

(3)对象库

对象库是用于编程的ArcObjects组件的集合。

ArcEngine中提供了大量的可供开发人员直接使用的类库。几种常用的类库:SyStem类库、SystemUI类库、Geometry类库、Display类库、Server类库、Output类库和Carto类库等。

四、C#调用IDL案例

COM_IDL_CONNECT组件调用是其他语言调用IDL的常用方式。它是在其他语言环境中创建了IDL的COM_IDL_CONNECT组件,实现参数传递,从而使用COM_IDL_CONNECT组件的函数功能。

调用COM_IDL_CONNECT组件的方法如下:

(1)在Microsoft Visual Stutio 2008中新建应用程序,添加COM_IDL_CONNECT “引用”;
(2)初始化COM_IDL_CONNECT;
(3)COM_IDL_CONNECT调用IDL中生成的文件;
(4)添加代码。

2.1 模块实现

新建项目,添加LDAModel.cs,其实现了LDA模型非监督分类的算法功能(具体见上一篇博客:基于LDA模型的非监督分类算法介绍)。使用的主要技术——ENVI/IDL与ArcGISEngine一体化开发的实现。

具体过程如下:

(1)调用组件

在LDAModel.cs中添加引用,引用COM_IDL_CONNECT组件

图1 添加引用

(2)初始化与编译

//新建COM_IDL_CONNECT对象
COM_IDL_connectLib.COM_IDL_connectClass oComIDL = new COM_IDL_connectLib.COM_IDL_connectClass();
//初始化ENVI
oComIDL.CreateObject(0, 0, 0);

COM_IDL_CONNECT提供的常用的方法如下:

表1 COM_IDL_CONNECT组件方法

(3)数据传递

基于LDA模型的非监督分类中,用到的六个参数在C#中和在IDL中的名称如下表2

表2 数据传递

在C#中调用IDL的语句:“oComIDL.ExecuteString(strExeString);”该语句中的ExecuteString相当于IDL中的命令行。

2.2 界面设计

图2 “基于LDA非监督分类”界面设计

具体过程如下:

(1)设计LDAModel.cs如上图“基于LDA模型的非监督分类”功能界面,完成按钮,下拉文本框等代码编写。

(2)设置项目DPESLib的属性,将“输出类型”改为“类库”,“生成DPESLib”,此时建立了一个动态链接库“DPESLib.dll”。

(3)设计总框架,添加引用“DPESLib.dll”,编写代码,即可调用动态链接库。

五、总结

利用ArcEngine搭建框架,采用ArcEngine与ENVI/IDL一体化开发技术,集成了基于LDA模型的非监督分类算法,最终实现整个系统。系统具备基本的GIS操作功能,能够进行矢量和栅格数据的加载、导出,系统主体实现基于LDA模型的非监督分类功能,并将分类好的栅格和矢量图像加载到主窗口视图中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾城一少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值