时间:2016-06-21 11:30 文章来源:http://www.lunwenbuluo.com 作者:阚旭 夏戈明 曹源 点击次数:
摘要:通过对国内外GIS平台二次开发现状的分析,指出目前GIS商业软件开发在某些方面的不足之处与依靠现有平台是否能够弥补不足,进而提出基于uDigSDK与uDigSRC的开源GIS二次开发的构想,并展示初步实现的态势图功能并指出该方案与目前其他GIS平台相比拥有的优势,最后探讨了是否能在已完成工作的基础上,结合当前其他一些技术手段实现更为复杂的态势图需求,如3D渲染与二三维数据的交互(鹰眼功能),通过互联网进行数据的分发,实现B\S模式等,对方案未来可行性进行了分析。
关键词:开源;GIS开发;uDig
1研究背景
态势图作为一种情景展示、分析的平台,在水文、地质、社会、军事等领域均有广泛的应用,一个优秀的态势图展示系统可以向用户提供多方面决策相关的地理信息。当前国内市场上ArcGis、MapGis、SuperMap等各种商业GIS平台受到广泛欢迎。上述商业软件既可以向GIS使用者提供地图服务,同时通过向开发者提供API用于二次开发。这种开发模式提高了开发效率,节省了开发成本,但这些产品不适用于大量在GIS平台方面拥有特殊定制要求的用户,如特殊图层叠合显示、图层属性交互、3D实时效果展示、平台安全性等。
在Geo-informatics社区的推动下,开源GIS软件近些年来的发展迅猛如MinnesotaMapServer、GeoServer、PostGis、GrassGis与uDig[9]。当前国内市场上基于开源GIS二次开发的研究大多集中在GrassGis平台上。GrassGis是基于C开发的一款开源GIS工具,其强大的数学计算能力受到众多研究机构、政府管理部门的欢迎。但对于一般开发者而言,GrassGis太过专业,更多计算功能需根据用户需求进行定制开发如分布式计算或空间图形计算等;另一方面,GrassGis框架下可视化部分与平台计算是个整体,只适用于单机C\S、少量数据的使用环境,在海量、实时数据,多平台接入的条件下需进行大量修改且具体工作量未知。综上所述,设计一种符合海量数据存取、分布式架构、模块化处理的开源GIS软件是最终选择uDig平台的原因。
uDig是基于eclipseRCP框架下的一款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等建模平台的库函数,在具体开发上大大简化了工作难度。
3uDigSDK+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,将该插件工程加载到原态势图工程中去即可完成功能新增。
联系方式
随机阅读
热门排行