APP下载

基于uDig的开源GIS态势图的设计研究

2016-10-21阚旭夏戈明曹源

科技创新与应用 2016年5期
关键词:开源

阚旭 夏戈明 曹源

摘  要:通过对国内外GIS平台二次开发现状的分析,指出目前GIS商业软件开发在某些方面的不足之处与依靠现有平台是否能够弥补不足,进而提出基于uDigSDK与uDigSRC的开源GIS二次开发的构想,并展示初步实现的态势图功能并指出该方案与目前其他GIS平台相比拥有的优势,最后探讨了是否能在已完成工作的基础上,结合当前其他一些技术手段实现更为复杂的态势图需求,如3D渲染与二三维数据的交互(鹰眼功能),通过互联网进行数据的分发,实现B\S模式等,对方案未来可行性进行了分析。

关键词:开源;GIS开发;uDig

1 研究背景

态势图作为一种情景展示、分析的平台,在水文、地质、社会、军事等领域均有广泛的应用,一个优秀的态势图展示系统可以向用户提供多方面决策相关的地理信息。当前国内市场上ArcGis、MapGis、SuperMap等各种商业GIS平台受到广泛欢迎。上述商业软件既可以向GIS使用者提供地图服务,同时通过向开发者提供API用于二次开发。这种开发模式提高了开发效率,节省了开发成本,但这些产品不适用于大量在GIS平台方面拥有特殊定制要求的用户,如特殊图层叠合显示、图层属性交互、3D实时效果展示、平台安全性等。

在Geo-informatics社區的推动下,开源GIS软件近些年来的发展迅猛如Minnesota MapServer、Geo Server、PostGis、Grass Gis与uDig[9]。当前国内市场上基于开源GIS二次开发的研究大多集中在GrassGis平台上。GrassGis是基于C开发的一款开源GIS工具,其强大的数学计算能力受到众多研究机构、政府管理部门的欢迎。但对于一般开发者而言,GrassGis太过专业,更多计算功能需根据用户需求进行定制开发如分布式计算或空间图形计算等;另一方面,GrassGis框架下可视化部分与平台计算是个整体,只适用于单机C\S、少量数据的使用环境,在海量、实时数据,多平台接入的条件下需进行大量修改且具体工作量未知。综上所述,设计一种符合海量数据存取、分布式架构、模块化处理的开源GIS软件是最终选择uDig平台的原因。

uDig是基于eclipse RCP框架下的一款GIS开源项目,也是Web地理信息系统的一个核心组件,同时官方推出uDigSDK与uDigSDK分别用于在其平台上的二次插件与源码开发,使用uDigSDK开发模式开发新的GIS功能模块,虽逻辑清晰但无法提供灵活自定义逻辑的界面,使用uDigSRC直接修改uDig源代码虽然可以获得安全的灵活性,但会陷入大量的技术细节和无法理出清晰的开发思路[4],所以一般开发都会选择两种方式混合进行。基于uDig的二次开发方法在Eclipse开发环境中的对应位置,这种开发方式能够满足如“使用一种完全开放源码的系列工具进行开发”的要求,也能够通过使用模型开发工具简化它的调用规模。

作为一款基于java语言开发的GIS平台,该平台首先拥有良好的可移植性以及系统兼容性,当前市场上一些主流的绘图、计算工具都向JAVA提供了API,开发人员可以在已有工作的基础上进行深入工作,降低了开发难度。

2 实现平台和环境

uDigSDK开发方式通过编写插件为GIS添加新的功能。在Eclipse上配置好uDig开发环境,即可获得udig.product运行产品及uDig中定义的扩展点,基于这些扩展点或Eclipse中定义的扩展点可对已有产品udig.product进行扩展,添加相应功能。在配置好的uDig开发平台上添加插件,扩展org.eclipse.ui.actionSets扩展点和net.refractions.udig.ui.operation扩展点,可实现连接数据库、拓扑分析及其应用等功能。

采用uDigSDK+uDigSRC+Eclipse开发平台能够实现二维地图的展示、部分编辑、简单地理信息测绘及目标元素属性的查看等功能,而目前上述框架下尚不能实现三维图形方面的操作,需要第三方平台提供三维建模的接口。然而一个完整的三维虚拟场景的开发工作量是十分巨大的,如果从原始代码行开始,将涉及众多有关3D图形绘制方面的领域。本课题希望通过现有一些成熟技术实现快速开发,因此有必要选取一种当前市场应用较为广泛且技术成熟,拥有面向java语言的API的平台,以便新的应用能够在已有开发包的基础上进行。

VTK是一款开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化,它使用数据流方式把信息转换成图像数据,在这种方式中包含了两种基本类型的对象:数据对象和处理对象[3]。它提供面向java语言的接口。VTK本身具有强大的流和高速缓存的能力,支持数据的并发执行,处理海量数据时不必考虑内存资源的限制;VTK既支持体绘制也保留着传统的面绘制,在改善可视化效果的同时可充分利用现有的图形库和图形硬件;此外,VTK也支持OpenGl/Matlab等建模平台的库函数,在具体开发上大大简化了工作难度。

3 uDigSDK+uDigSRC+Eclipse下实现二维态势图

二维态势图下需要向用户提供两种地图信息:栅格地图与矢量地图。其中栅格地图的来源可以是不同分辨率下的卫星遥感图,也可以是各种地理信息图片。但上述两类地图的加载在uDigSDK插件开发下都有一个共同的前提,需向系统提供图片的坐标信息。如,一张4096X4096分辨率的.jepg格式的中国地图图片,在WGS84坐标系下(经纬度坐标系),配置文件需在图片在加载的时候向系统提供下列数据:

图片左下角所在坐标(x1,y1)

图片右上角所在坐标(x2,y2)

图片的分辨率(vol1,vol2)

根据以上数据,设计计算公式(1)

R1=(x2-x1)/vol1,R2=(y2-y1)/vol2,(1)

默认屏幕中心坐标起点(0.000000,0.000000),最后再提取一次x1,y2的数值形成图片的位置信息。以上计算过程由开发人员设计,用户只需在地图上提供图片位置信息。

这种栅格图片的加载方式还有其他优点,当态势图中需要实现元素移动功能时,只需修改坐标信息并刷新元素图层即可。

矢量地图上的元素是由点、线、面元素组成的,这些元素的清晰度不会随着地图比例尺变化。加载矢量图形可以读取通用的矢量图格式文件(如.shp),也可以通过加载空间数据库(如POSTGIS)中的地图数据表实现。以读取POSTGIS数据库为例:uDigSDK插件包中加载net.refractions.udig.catalog.postgis插件包,包中新增对数据库驱动、数据库名、用户名、密码的定义代码即可。

除上述两种地图信息加载外,开发人员也可以通过uDigSRC开发定义其他地图工具如面积计算:定义当前比例尺下每个pixel点代表面积S1(pix),定义比例尺(scale)转换下pixel所代表面积变化公式S1(pix)=f(scale),在地图上选取一个范围,统计范围内像素点个数num,最终面积Area=S1(pix)*num。

将上述代码封装完成后,新建插件工程,工程名定义为Custom.areaCaculation,将该插件工程加载到原态势图工程中去即可完成功能新增。

4 3D态势图技术探讨

基于uDigSDK+uDigSRC框架下的二次开发尚不能解决3D视图的技术问题,但可以通过其他已经成熟的3D平台提供给java的接口实现上述框架下的三维图形功能。目前领域内存在几种可行平台:Java3D、JOGL以及VTK。

以技术探讨成熟度来说,VTK无疑是首选3D平台,它独有的高速数据处理能力面对海量数据的3D态势图比其他3D平台更有优势,它对其他3D平台函数库的支持实现了各平台间功能上的互补。此外,三维建模中有一个难题:地形表面是一个在空间上连续的空间曲面,而建筑物等地物的地面理论上应该是一个平面。建筑物地面和地形表面相交的部分在空间上是相互叠加的,若不对坐落于地形表面上的建筑物地面做任何处理就叠加在地形表面上,则二者之间必然产生集合缝隙[5]。相比市场上其他3D平台,VTK率先解决了该边界缝隙的问题,下面以VTK为例,介绍三维场景制作及二维三维态势图的交互式响应。

一个简单的三维场景制作首先需定的以下几个环境参数:光源,光线投射方向,光色,光线范围,物体表面形状、颜色、面积、材质,背景颜色,摄像机位置,最后是空间坐标系。若是想实现摄像机视角漫游及鼠标、键盘控制,需新增其他事件监听代码及空间位置信息。以上功能均可用java代码实现,开发人员只需在工程开始前导入相关jar包即可。

从对数据的作用形式看,目前对人一图和图一模之间交互的研究集中在数据表现和数据操作两个方面,前者包括各种专题制图、复杂符号表达、地图叠置、多色彩组织和视图组织等表达技术,后者包括聚集、排序、动画、数据转换和视图连接等操作方法[2]。而本课题下二维与三维图形的交互式响应是指uDig下的二维态势图与VTK制作的3D场景能够根据一种映射关系进行数据交互。这种映射关系可以是坐标,也可以是瓦片图的索引号。另外,为减少服务器加载3D地图时资源的消耗,只在需要观察3D态势图时才进行3D渲染绘制。

2D/3D互响应模块应拥有以下功能:

(1)用户在3D漫游时,2D场景要实时显示用户的位置和视野方向;(2)用户在2D/3D场景中改变观察位置时,对应3D/2D的观察着位置也要改变;在2D/3D场景中查询目标属性时,对应3D/2D场景中的目标需高亮或改变颜色;(3)应用程序初始化时,不调入3D场景,单独在2D地图绘制面板上选择一块区域用于3D场景显示。

5 态势图的B\S架构实现

GrassGis、QGis、OpenJUMP、uDig等GIS均属于开源桌面GIS项目,而当前市场上GIS平台的主要应用纷纷建立在WEB架构下。所以,为了能够在互联网平台上发布该项目,需要一个发布平台将上述桌面GIS工程加载到网站服务器中,并实现通过浏览器进行浏览。

uDig下的态势图在B\S平台下的发布相较其他GIS软件容易得多,GeoServer是OpenGIS Web服务器规范的J2EE实现。利用GeoServer可以方便地发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过GeoServer可以比较容易地在用户之间迅速共享空间地理信息。GeoServer为开发者提供了Web发布服务器上所需的基本组件,相比其他开源软件具有:

(1)基于serlet、STRUTS框架、支持高效的Spring框架开发;

(2)兼容WMS、WFS Feature;

(3)支持PostGis、Shapefile、Oracle、DB2、MySQL等数据库;

(4)支持多种坐标投影;

(5)可以运行在任何基于J2EE/Servlet的容器之上;

(6)嵌入MapBuilder支持Ajax的地图客户端;针对Web端显示地图数据还需在网站项目中新增mapbuilder.js方法,该方法是由MapBuilder平台提供的。开发人员需从官网下载GeoServer平台,在GIS服务器上安装完成后加载uDig工程、导入MapBuilder相关文件。最后根据需求在Web项目中新增数个.xml文件用于网页布局配置、功能模块添加、浏览器下坐标系定义等即可完成uDig工程在互联网平台上的发布。

6 展望

上述部分展示的功能实现只是GIS态势图中很小的一部分并对未来态势图中的功能模块进行了划分,下一步的开发与测试还面对这以下问题:

目前虽然实现了JAVA框架下的3D地形地貌的绘制,但存在着系统帧数低,图形化计算速度较慢的问题,这是由于3D显示方法(引擎)设计过于简单,占用大量显存造成的。这个问题上,可以参考OpenGL与DX的图形加速算法;第二个问题在于2D/3D图像之间的转换,特别是坐标转换,随着三维地图数据的增加,系统需要一个统一的坐标转换算法,而不是針对每一个坐标点设计与3D图形投影坐标的对应关系;第三个要解决的问题是二维栅格图的分片与无缝粘贴,这是系统在读取显示高清卫星遥感图的时候需要解决的,面对可能大至T字节的栅格图时,图形不分片,一般服务器或集群都无法短时间内处理,而分片后又怎样将数张图片文件融合成一张新的图片也是下一步工作需要研究的。

参考文献

[1]黄健熙,郭利华,龙毅,等.二维地图与三维虚拟场景的互响应设计与实现[J].测绘信息与工程,2003,28(1).

[2]樊明辉,陈崇成.基于地图的交互式可视化技术[J].华南理工大学学报,2008,36(5).

[3]G.Formetta,A.Antonello,S.Franceschi,O.David,R.Rigon,Hydrological.modeling with components:A GIS-based open-source framework.Environmental Modelling &Software,2014,55:190-200.

[4]Yanming Chen,Jiechen Wang,Manchun Li,Jie Liu,Liang Cheng,Kang Yang,Dong Cai,3D Visualization of Electromagnetic Environment,978-1-61284-848-8/11 2011 IEEE.

[5]Smita Sengupta,Kavita V V Ganeshan,N.LSarda,A2CWiC,Developing IITB Smart CampusGIS Grid,2010,9:16-17.

猜你喜欢

开源
校园武术“学、练、赛”一体化实践探索
国内开源发展迎政策利好
五毛钱能买多少头牛
释放开源力量 驱动产业创新 第十四届开源中国开源世界高峰论坛在京盛大举办
2019(第十四届)开源中国开源世界
2019开源杰出贡献奖
融入开源:拥抱变革中的机遇
开源技术支撑软件产业创新
开源驱动创新