基于SuperMap三维场景的WebGIS开发与设计

2015-05-30 11:23礼晟东赵鹏飞何凤良
科技创新与应用 2015年28期

礼晟东 赵鹏飞 何凤良

摘 要:文章主要阐述了基于SuperMap平台,借助HTML5、JavaScript等编程语言,构建三维场景地理信息服务网站的关键技术与实现方法。为进一步提升用户体验与需求,在此基础上,结合WebGIS开发特点,文章还探讨了多角度、多时相表达地理信息的解决方案和思路。

关键词:三维场景;SuperMap;Web GIS

引言

随着GIS的深入应用,越来越多的人们要求利用真三维空间来处理问题。对于客观世界,三维GIS具备二维GIS无法比拟的表现形式,对于地理信息的深层次分析和挖掘,三维GIS也有着不可替代的作用。目前,在图像图形处理、三维可视化等相关技术发展的多重推动下,三维GIS不断发展,在国土、地质、石油等多个领域扮演着越来越重要的角色。同时,在网络时代,Web GIS的发展日新月异,为GIS的应用提供了更为广阔的空间,也为用户提供了更为方便快捷的GIS服务。将三维GIS和Web GIS两者的优势结合到一起,对GIS的发展具有重要的意义。

SuperMap作为具有国内领先水平的GIS平台,具有高性能、高稳定性、高可靠性的特点。它提供了企业级的GIS服务器以及开发真三维应用的工具包,能够支持用户快速高效地开发特定的Web三维GIS应用产品。

1 开发前准备

编程语言采用JavaScript,在开发前需要在服务器端部署服务发布平台,用户可以根据自身需求选择安装SuperMap iServer平台进行数据及系统服务的发布,也可以采用IIS等其他服务进行数据和系统的发布。GIS功能利用SuperMap iServer for Realspace提供的开发脚本库及web三维GIS插件来开发实现。

1.1 插件安装

Web三维GIS插件是以ActiveX控件的形式嵌入网页中,用户在浏览三维场景中需要安装该插件,所以开发者在发布系统的同時,需要把插件也发布出去。

1.2 添加脚本库

将SuperMap iServer for Realspace安装目录下lib脚本库(目录组织见图1)复制到系统目录下。在系统中新建SuperMap.Include.js脚文章件,在其中添加引用脚本库的代码,并在html主界面中引用该脚文章件。

1.3 加载默认场景

在主界面初始化方法中添加下列代码来加载默认场景控件。参数中包括三维场景容器“sceneControlDiv“及控件初始化完成和失败的initCallback()和failedCallback()两个回调函数。

sceneControl = new SuperMap.Web.UI.Controls.SceneControl($get("sceneControlDiv"),initCallback, failedCallback);

回调函数initCallback()中用于添加数据加载等其他功能。已加载三维空间服务数据为例,代码如下:

scene=sceneControl.get_scene();

scene.open("http://localhost:8090/iserver/services/realspace-test/rest/realspace", "test");

2 关键代码与实现

在Web GIS开发过程中,普遍存在查询、分析、图层控制等基本的GIS功能的需求。下文中介绍GIS常用功能的实现步骤和方法。

2.1 场景操作

2.1.1 场景设置

用户在使用的过程中,常常会根据个人习惯和需求来调整场景部件的状态,开发者可通过scene.get_sceneOption()接口设置场景中大气层、导航板、状态栏、经纬网、太阳光照等内容。此外,场景中经常会存在地势比较平坦的状况,为了凸显当前地势的变化情况,可通过scene.set_terrainExaggeration()接口设置地形拉伸比例实现地形的夸张和压缩。

2.1.2 互操作

对于场景的交互操作可通过SceneAction类来实现。Supermap脚本库提供了漫游、缩放、点选择、空间量算等三维操作状态,其中,点选择和空间量算的操作需要注册回调函数并返回相应的参数。

其他的交互操作如绘制标注、框选要素等特定需求的操作状态,可通过扩展SceneAction来实现,然后对扩展的类的使用方法与漫游等基本操作的使用方法一致。

2.2 GIS功能

2.2.1 属性查询

属性查询主要通过GerFeature3DsBySQLParameters()、GetFeaturesBySQLService(url)等接口来实现,用户通过定义SQL语句,来对指定的数据服务进行查询。其中,GerFeature3DsBySQLParameters()用于设定数据服务的名称和SQL语句,GetFeaturesBySQLService()用于设定数据服务的地址和回调函数等内容。查询执行的回调函数包含查询结果的参数,通过该参数可获取此次查询得到的目标要素信息。

2.2.2 空间查询

空间查询主要通过GetFeature3DsByBoundsParameters()、GetFeature3DsByBoundsService(url)等接口来实现,用户可通过自定义矩形框范围来查询空间上相交的结果。

值得注意的是,空间查询返回的值是由要素外接矩形之间的相交关系得到的,所以,查询结果存在着一些外接矩形相交但实际上本身并不相交的要素,显然此类结果需要从中剔除。为了保证查询的准确度并兼顾查询效率,需要在查询执行后的回调函数中对结果进行判断。判断过程采用Geometry3D.hitTest(point, tolerance)方法,该方法用于判断Geometry3D对象是否与以point为中心,tolerance为半径的圆有重叠部分,能够清除结果中大部分的错误记录。方法步骤如下:

(1)获取查询矩形框的中心点和矩形框的最长边的一半,作为hitTest()判断参数;(2)遍历查询结果,获取每个要素几何属性,参与判断;(3)若返回结果为True则作为查询结果予以保留,反之从查询结果中清除。

2.2.3 图层控制

三维场景中的图层分为普通图层和地形图层两部分,分别通过scene.get_layer3Ds()和scene.get_terrainLayers()方法实现。普通图层包括矢量图层、影像图层、缓存数据图层、专题图层、模型图层等。通过图层控制方法,可以调整图层的显示、透明度、叠放顺序、显示高度等。利用此方法,可以在三维场景中展示地理信息的统计图表、专题分析结果等内容。如图2所示。

3 功能扩展

在实际的开发过程中,客户常常会根据自身的需求,提出特定的GIS功能需求。因此,根据开发平台现有的接口,开发者需要充分结合网页的编程优势,实现一些更加贴合特定需求的功能。作者在此提出三种功能上的扩展,和读者学习交流。

3.1 多时相数据的演变

多时相是地理信息的一個重要特点。随着GIS数据的更新速度不断加快,开发者越来越多的面临多时相数据,如何更好地表现和分析多时相数据变得愈加重要。

借助于开发中的图层控制窗口,开发过程中可以对数据设定一个时间轴,在切换时间点的同时展现对应时相的数据,达到预览数据演变的过程。在这个过程中,用户也可根据需求添加数据对比图层的展示,也可利用setTimeout()方法来自动控制多时相数据的切换,实现效果见图3所示。

3.2 地形分析功能的扩展

目前,平台提供的网页端地形分析功能具有一定的局限性,但是通过scene.getAltitude(x,y)方法可获取高程点位信息,开发者可以自主的设定分析算法进行特定的分析计算。例如,可通过添加一条线段,获取沿该线段100个采样点的高程值来得到该线段的剖面分析图。

3.3 第三方库文件的丰富表现形式

传统的表格等表现分析统计的结果显得比较呆板、枯燥。从用户的角度来出发,开发者需要寻找更为灵活生动的表现形式。目前网页编程中有很多优秀的第三方图表库,如highCharts,eCharts等,采用这些第三方的脚本库,可以快速地开发出较多丰富的图表表现形式。

4 结束语

在日新月异的计算机时代,基于三维场景的Web GIS在众多GIS产品中有鲜明的特点和优势,同时在影响国民经济的多个领域发挥着愈加重要的作用。针对政府、企业等不同部门,开发者需要做出更多特定的GIS服务。文章在介绍开发关键技术的同时,也提出一些对功能扩展的想法和意见,旨在抛砖引玉,希望对GIS相关开发提供一些帮助和经验。

参考文献

[1]吴创奇.基于SuperMap的二三维一体化的WebGIS系统开发[J].科技创新导报,2011(21):24-25.

[2]葛梓培,马琳贺.基于SuperMap IS.NET的水利GIS系统开发[J].科学中国人,2014(21).

[3]姜仁贵,解建仓,李建勋,等.基于数字地球的WebGIS开发及其应用[J].计算机工程.2011(6):225-227.

[4]吕智涵,冯圣中,陈戈.基于多维WebGIS的三维互动网络虚拟社区[J].系统仿真学报,2013,25(9):2109-2114.

作者简介:礼晟东(1979-),男,辽宁沈阳人,工程师,主要从事测绘产品生产的技术管理工作。