APP下载

DotSpatial开源GIS软件扩展研究

2013-01-22华东师范大学地理信息系统教育部重点实验室吴健平

电子世界 2013年19期
关键词:类库数据格式开发者

华东师范大学地理信息系统教育部重点实验室 张 弟 吴健平

1.引言

近年来GIS开源软件发展很快,DotSpatial是众多GIS开源软件中功能比较全面、扩展性比较好的一款,它提供空间数据的处理、分析、投影等功能。目前已有很多其他开源GIS软件使用DotSpatial提供的功能,但是DotSpatial存在着与其它开源软件相同的不足之处,比如官方开发文档及帮助资料少,对GIS数据格式的支持不够全面等。而传统的GIS商业软件虽然开发文档齐全,支持多种GIS数据格式,但是授权昂贵,并且安装占用大量的磁盘空间。由于商业因素,商业GIS软件源代码和关键算法受到严格保护,不利于学术研究。因此研究和完善开源GIS软件在学术和商业方面都有着重要意义,而DotSpatial是一个比较新的开源类库,目前对其研究的文章还很少。综合上述因素,本文介绍了DotSpatial的架构,深入研究了其提供的扩展机制,最后利用官方提供的模版扩展实现了DotSpatial对NetCDF数据的读取与渲染。这种扩展方法具有一定的通用性,可以用来实现让DotSpatial支持更多种类的GIS数据。

2.DotSpatial软件介绍

2.1 DotSpatial构成

DotSpatial是一套基于.Net Framework 4.0平台开发的开源GIS类库,整套类库是使用C#语言编写完成,以GNU LGPL授权(GNU Library General Public License)形式开放源代码,目前整个项目由几十个开发者共同维护,并且不断地有新的开发人员参其中。DotSpatial官方网址为http://dotspatial.codeplex.com,网站主要包括源代码、类库、说明文档、讨论区、主要开发者、授权文档等几个部分。

DotSpatial的类库可供其他程序直接调用,Mapwindow 6、Hydrodesktop、Mad、Area of Review、Marine Life等开源GIS软件使用了DotSpatial的类库提供的功能。为了让开发者迅速熟悉这套类库,官网提供了一个已经编译好的简易示例程序。该程序支持Shapefile文件,实现了缩放、平移等常见GIS操作,并且支持扩展。

2.2 DotSpatial整个类库实现的功能

目前DotSpatial整个类库实现的功能包括:

①显示地图;②支持Shapefile,Bgd,以及其它常用的栅格数据和遥感影像数据;③渲染符号和标签;④支持动态投影和投影变换,WGS84为默认投影方式;⑤支持属性数据的编辑和显示;⑥支持空间分析,包括叠加分析、缓冲区分析、差值分析、空间统计等。⑦支持GPS格式数据。

DotSpatial很好的实现了功能模块化设计思想,方便开发者灵活定制程序。Dot-Spatial架构在设计时主要考虑了两个要素。首先是将用户界面部分与业务逻辑部分分离,其次是将各个模块编译到不同的DLL中,提高代码的利用率,并且做到无需加载整个类库就可使用部分功能。

3.DotSpatial扩展机制

DotSpatial提供了完善的扩展机制,允许开发者对其功能进行扩展。DotSpatial启动时会对根目录下的Application Extensions子目录进行扫描,该目录下任何实现IExtension接口的DLL都会被加载到主程序中,加载完成后就可以使用DLL中的扩展功能。IExtension主要包含Activate和Deactivate和方法。DotSpatial启动时调用Activate方法,完成模版的初始化任务。方法Decative在卸载模版时被调用,实现卸载模版及资源清理功能。

为了方便开发人员进行扩展,DotSpatial提供了一个可以安装的插件模版(template),下载地址为:http://visualstudiogallery.msdn.microsoft.com/92919cee-a2b0-43c6-8993-aeac965bc4b5,安装模版后,用Visual Studio新建项目时可以选择该模版,并在此基础上进行扩展开发。

模版提供了实现IExtension所需的基础代码,其中包含一个Extension基类和一个MyPlugin子类。Extension类实现了IExtension接口中的Activate和Deactivate方法,Plugin子类继承Extension父类,并且还有一个ButtonClick方法,可以。模版加载后会在DotSpatial的Extensions菜单中生成对应的菜单项,点击菜单会执行ButtonClick方法,主要的扩展功能可以在该方法中实现或由该方法调用其它方法实现。

4.DotSpatial扩展实例

4.1 NetCDF简介

NetCDF(Network Common Data Form)网络通用数据格式是由UCAR(University Corporation for Atmospheric Research)针对于科学数据的特点专门进行开发的一种开放的编码标准。由于其开放性、自描述性、平台独立性、高可用性等特点,目前已广泛应用于气象学、水文学、海洋学以及地理信息系统等诸多领域。已经有很多文章在NetCDF的实际应用方面做了深入研究,但是在扩展GIS软件实现支持NetCDF数据渲染方面的研究还不是很多。DotSpatial本身不支持NetCDF数据,我们通过前面介绍的模版编程实现DotSpatial渲染NetCDF数据。DotSpatial原生支持ESRI的Bgd栅格数据,因此可以通过在内存中将NetCDF数据转换为Bgd的方式实现NetCDF数据的渲染。

NetCDF文件包含维(dimensions)、变量(variables)和属性(attributes)三种描述类型,每种类型都会被分配一个名字和一个ID,这些类型共同描述了一个数据集。NetCDF库可以同时访问多个数据集,用ID来识别不同数据集。维表示变量维度信息,变量存储实际数据,属性表示变量或数据集本身的辅助信息,根据作用域可分为适用于整个文件的全局属性和适用于特定变量的局部属性,全局属性则描述了数据集的基本属性以及数据集的来源。NetCDF可在某一维进行追加,无需重新定义数据格式并复制原有数据,图1是一个NetCDF在Time维的增长示例,图2所示为转换NetCDF格式。

图1 NetCDF维增长比例

图2 转换NetCDF格式

4.2 NetCDF库

UCAR提供了一系列操作NetCDF文件的库,通过这些库可以读写NetCDF文件数据或元数据信息。核心库由C语言编写,在此基础上提供了C、C++、Java、Python、Perl等多种主流编程语言的API,但是还不支持C#,可以通过C#封装NetCDF核心C库函数的方式间接读取NetCDF数据。

4.3 实现DotSpatial对NetCDF数据的读取与渲染

DotSpatial本身支持ESRI的Bgd栅格数据,通过实现IExtension接口,在内存中将NetCDF数据转换为Bgd格式,DotSpatial可以显示转换后的数据,转换过程如图2所示,最终的渲染效果和其它支持NetCDF数据的软件是一致的,这说明前面的扩展方式是可行的。

5.总结

本文介绍了开源GIS软件DotSpatial及其扩展机制,利用其官方提供的模版实现了DotSpatial对NetCDF数据的读取与渲染,可以充分的利用DotSpatial已有的平移、缩放等功能对NetCDF数据进行常见GIS操作。这种扩展方法具有一定的通用性,可以很好的扩展DotSpatial原有功能,用来实现支持多种GIS数据格式。

[1]Li J,Liao W,Choudhary A,et al.Parallel NetCDF:A high-performance scientif ic I/O interface[C].2003 ACM/IEEE Conference.IEEE,2003:39-39.

[2]孙建伟,孙昭晨,陈轩,等.NetCDF格式数据的创建及应用[J].交通标准化,2010(226):31-34.

猜你喜欢

类库数据格式开发者
用Java编写客户机/服务器端应用程序
Python在数据可视化中的应用
数据结构课程教学改革方案和应用效果
数据结构可视化类库的设计与实现
基于RFID的户外广告监管系统的设计与实现
“85后”高学历男性成为APP开发新生主力军
16%游戏开发者看好VR
栝楼产业开发者谢献忠
基于特征库的测井数据格式自动识别与转换方法
基于ArcGIS的规划数据格式转换研究