基于Google Earth插件和Ajax技术的东南亚旅游资源三维WebGIS的实现
作者:向光 杨昆
来源:《数字技术与应用》2013年第08
        摘要:利用Google Earth插件及其APIAjax技术,以ASP.Net4.0为平台,开发了泰国、新加坡等东南亚11国旅游资源的三维WebGIS,实现了旅游地理信息系统与3S技术、3DGIS技术和Internet的结合(3DWebGIS)。该方法适用于某一专题的三维WebGIS的快速开发。
        关键词:Google Earth Ajax 三维WebGIS
        中图分类号:TP311.11 文献标识码:A 文章编号:1007-9416201308-0132-03
        随着经济的发展和人民生活水平的提高,旅游业正越来越成为带动整体经济发展的重要手段。以空间信息处理为核心的地理信息系统(GIS)技术,因具有强大的空间信息管理、空间信息分析、空间信息查询及三维影像显示等功能[1],而成为旅游业信息化的首选平台。
        近二十年来,关于旅游与地理信息系统结合的研究逐渐兴起,并形成了旅游地理信息系统(TGIS),即以旅游地理信息数据库为基础,在计算机硬软件支持下,运用系统工程和信息
科学的理论和方法,综合和动态地获取、存储、管理、分析和应用旅游地理信息的计算机信息系统。一切与旅游关联的地理信息和数据,如景点、交通、住宿、娱乐、购物、文化特征、特及提示等都是TGIS的研究对象[2]。旅游地理信息系统的发展趋势必然是与3S技术的结合,与3DGIS技术和虚拟现实技术(VR)的结合,与Internet的结合(WebGIS[3]。万红莲[4]、孙雷[5]、艾尧[6]、张世良[7]、陈赞章[8]、孙仲益[9]等都针对不同地区的旅游地理信息系统进行了设计和实现,但均没有实现3DGIS
        20056月,谷歌推出Google Earth,给互联网用户带来全新的感受,也给地理信息行业带来了巨大的冲击。Google Earth作为优秀的地图平台,不仅能够提供较强的地图图像传输功能,更能提供免费的APIAppl-ication Programming Interface),用户只需加上业务代码,即可构架一个满足基本业务需要的行业地理信息系统[10]。与此同时,各种关于Google Earth开发的研究也层出不穷,闫发泽[11]、朱新芳[12]、祝明[13]、江昕[14]、唐华林[15]、殷强[16]等利用Google Earth设计开发出了不同的系统,为Google Earth开发提供了很好的范例,但都没有实现Google EarthWeb平台的结合。
        本文利用Google Earth插件将卫星遥感影像和GIS布置在一个地球的三维模型上的特点,
同时利用Ajax技术,以ASP.Net4.0为平台,结合搜集到的东南亚旅游资源的空间信息和属性信息,开发了泰国、新加坡等东南亚11国主要旅游景点及酒店信息的三维WebGIS,实现了旅游地理信息系统与3S技术的结合,与3DGIS技术的结合,与Internet的结合(WebGIS)。
        1 技术分析
        1.1 Google Earth插件的技术分析
        Google Earth 插件是2008528Google公司发布的一个新的浏览器的插件程序(Plug-in)和应用程序接口(API),用来支持Google EarthWeb上的展示。开发人员可以利用该插件及其API3D模型加入到Web应用程序中,Google Earth的三维功能得到增强,其应用范围也得到了扩展,用户可以在网页中漫游至地球上的每个地方,对于三维数字城市的建设,Google Earth有其得天独厚的优势。使用API 可以绘制标记和折线、使图片覆盖区域、添加3D模型或加载KML文件,从而允许构建复杂的3D地图应用程序。技术优势如下:
        1)免费的大量高分辨率遥感影像数据。由于整个东南亚地区范围广、面积大,如果
通过购买遥感影像的方式来构建该系统,价格将非常昂贵;Google Earth免费提供了该地区的遥感影像数据,大部分地区分辨率高达0.6米以上,完全满足本系统的需求。
        2)详细的地名、道路等矢量数据。由于研究区是国外地区,要想获取这些地区的矢量数据非常困难,而Google Earth在遥感影像上叠加了行政区划、地名、道路等矢量数据,满足了系统对基础矢量数据的需求。
        3)提供三维地图模型及工具。Google Earth不仅实现了对地形地貌的三维展示,而且还提供了大量的三维模型,特别是很多旅游景点的著名建筑都提供了三维模型,并且可以加载自己的三维模型在Google Earth上展示,因此可以在上面实现虚拟旅游,不出国门即可游遍世界。
        4)全球最先进的三维渲染引擎和数据压缩传输技术。Google Earth采用的超高效率影像数据压缩技术,对用户的网络和硬件条件要求极低,只需较小的网络带宽和较低的硬件配置即可获得良好的用户体验。
        1.2 Ajax技术分析
        Ajax提供与服务器异步通信的能力,从而使用户从请求/响应的循环中解脱出来。借助于Ajax,可以在用户单击按钮时,使用JavaScriptDHTML立即更新UI,并向服务器发出异步请求,以执行更新或查询数据库。当请求返回时,就可以使用JavaScriptCSS来相应地更新UI,而不是刷新整个页面。最重要的是,用户甚至不知道浏览器正在与服务器通信,Web站点看起来是即时响应的。
        本文采用Ajax技术实现页面的局部刷新,在用户浏览地图的同时自动查询、更新当前浏览范围内的景点信息和酒店信息。用户只需关注对地图的操作,系统会自动根据用户的操作自动刷新网页中的旅游资源信息列表和地图上对应的信息,而不会使整个网页进行刷新。
        2 系统实现
        2.1 数据来源
        本文所使用的遥感影像、地名、道路、高程及三维模型利用Google Earth提供的免费数据;旅游景点、主要酒店等旅游资源的空间数据和属性数据则从因特网上搜集、整理、归类,并存入空间数据库。
        2.2 系统构成
        本文以ASP.Net4.0为平台,利用Ajax技术和Google Earth插件及其API开发。前台采用HTMLCSS以及jquery来搭建框架,利用JavaScript实现功能,后台采用C#编程实现具体功能。Web服务器架构为IIS7.0,利用ArcSDE10.0+SQLServer2008作为空间数据库来存储旅游资源的空间数据和属性数据。整个系统构成如(图1)。
        2.3 主要模块和功能[9-10]
        2.3.1 地图控制模块
        主要是对地图布局(包括:状态栏、导航控制工具、经纬度网格、鹰眼、比例尺、鼠标控制工具)、地图图层控制(包括:行政区划及地名、3D建筑模型、道路、地形、旅游景点)和快速定位的控制,如(图2)所示。其中地图布局控制主要用到Google Earth插件APIGEOptions接口,例如:显示地图状态栏的JavaScript代码为:ge.getOptions.setStatusBarVisibilitytrue);
        地图图层的控制主要用到KmlLayerRoot接口,例如:要加载3D建筑图层的JavaScript
代码为:ge.getLayerRoot().enableLayerByIdge.LAYER_BUILDINGStrue);
        Google Earth插件中可用图层包括:
        1LAYER_BORDERS-用于显示国家和地区边界,以及城市、州或省/自治区/直辖市、国家/地区、海洋等的位置标签。
        2LAYER_BUILDINGS-3D建筑。
        3LAYER_BUILDINGS_LOW_RESOLUTION-灰建筑(非仿真)。
        4LAYER_ROADS-用于显示道路和道路名称。
        5LAYER_TERRAIN-3D地形。
        6LAYER_TREES-3D树木模型。
        2.3.2 旅游景点浏览模块
        当用户浏览地图时,通过GEView接口的getViewportGlobeB
        ounds函数来获取当前视图范围,具体代码为:
        var View();
        var ViewportGlobeBounds();
        var South();
        var North();
        var West();
        var East();
        系统自动对当前范围内的旅游景点列表实时动态更新。如果用户对景点列表中的任意景点进行点击时,地图将自动飞行到该景点的具体位置,弹出该景点的详细介绍信息及图片等。如(图3)所示:
        2.3.3 酒店浏览模块
        该模块和旅游景点浏览模块功能类似,所用方法和接口相同,不同的是查的是当前视图范围内的酒店信息。如(图4)所示。
        2.3.4 地图显示模块
        主要是调用Google Earth插件来显示地图,并根据后台返回的信息将视图范围内的旅游资源信息转换为Kmljquery实现ajax,然后利用插件的parseKml函数和将Kml字符串加载到Google Earth插件上进行显示,代码如下所示:
        if currentKmlObjectge.getFeatures().removeChildcurrentKmlObject);
        currentKmlObject=ge.parseKmlkml);ge.getFeatures().appendChildcurrentKmlObject);
        为了避免地图上信息太多影响视觉效果,对数量较多的酒店信息设定了显示高度,即只有地图放大到一定程度才会在地图上显示酒店信息。
        2.4 数据流程
        根据Kml文件可以用来描述和保存地理数据(包括点、线、面、多边形,多面体和模型等),能在Google Earth客户端中显示的特点,本文核心思想是根据当前视图范围动态查询旅游资源信息,并转换为Kml,然后通过Google Earth插件加载Kml显示,具体的数据流程为:用户浏览地图,Google Earth插件从Google Earth服务器获取遥感影像、高程、道路、三维模型等数据,并触发地图更新事件。触发地图更新事件后,利用Ajax代理向web服务器发送请求,Web服务器根据请求范围向空间数据库发送查询请求,空间数据库将查询结果返回Web服务器,Web服务器将结果转换为Xml文件返回Ajax代理,Ajax代理将接收到的Xml文件转换为KML文件,然后在Google Earth插件中显示,并更新用户界面。系统数据流程如(图5)所示。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。