(浙江大学 人工智能研究所,浙江 杭州 310027)
1998年,美国和日本等国家的大气、海洋科学家提出了全球海洋环境观测项目——Argo计划,该计划的主要任务是采集全球海洋上层的海水温度、盐度剖面资料,以提高气候预报的精度,有效预防全球日益严重的气候灾害给人类造成的危害[1]。截至2009年2月,全球海洋上Argo浮标数量达到3 325个,它们共同构成了一个庞大的全球实时海洋监测网。这些浮标每年提供多达10万个海水温度和盐度剖面资料(0~2 000 m)[2]。
面对快速增长的Argo数据,为方便Argo资料用户,需要提供一个高效、直观的Argo数据检索和共享服务系统,实现高效的信息检索和信息共享,更加方便Argo研究人员研究剖面数据,从而为进一步深入的科学研究提供良好的信息支持。本文设计并实现了基于WebGIS的Argo数据共享服务系统。
早期的Argo数据共享国内外主要采用数据光盘的形式[3-4],该方法可以实现简单的数据共享和检索,但光盘容量有限、易损坏和分发成本高。基于网络的软件架构可以弥补光盘管理方法的不足之处,国内[5-6]Argo资料中心大都采用C/S(Client/Server)体系结构,该方法通过客户端软件和服务器之间的交互实现系统功能,但用户需要下载并安装客户端软件;国外Argo资料中心大都采用B/S(Browser/Server)体系结构,但是查询功能并不完善,没有充分利用Argo数据的地理信息的特性。
根据 Argo原始数据的具体情况,在对 WebGIS相应的服务器和客户端软件进行调研后[7-9],对基于WebGIS的Argo数据共享服务系统进行分析和设计,本系统采用主流的 B/S体系结构,采用混合数据模型将Argo数据的地理信息属性分离出来进行空间分析,引入缓存技术和 Ajax技术来缩短访问延时和改善用户体验。与以往的Argo数据共享服务系统相比,该系统具有较高的稳定性、灵活的可扩展性和较好的用户体验。本系统框架总体上分为五层,即显示层、服务器层、GIS数据缓存层、混合数据库层和原始数据层,如图1所示。
系统总体框架中各层及其功能如下:
(1)显示层:主要由 Web浏览器组成,是用户和系统交互的接口,用来进行地图的显示和Argo数据的在线查询、分析,可以使用对JavaScript脚本渲染较快的浏览器,如Google Chrome。
(2)服务器层:由 Web服务器和 WebGIS服务组成,Web服务器负责非GIS数据的业务请求和处理工作,WebGIS服务器负责GIS数据的查询、空间分析。GeoServer是整个WebGIS服务的核心部分,服务器在接受用户请求后,通过数据库接口访问数据库,根据 WMS(Web Map Service)或 WFS(Web Feature Service)协议将返回的数据通过 OpenLayers以栅格或者矢量的形式向浏览器进行渲染输出。所有服务均采用J2EE模式开发,并部署在Tomcat或者JBoss等J2EE容器中。
图1 系统总体架构图Fig.1 System framework
(3)GIS数据缓存层:由部署在 J2EE容器中的GeoWebCache模块和文件服务器共同组成。GeoWebCache是一个采用Java servlet实现缓存WMS Title的开源项目。目的是为了减轻 GeoServer服务器的工作负荷,实现更好的用户体验。当客户端请求一张新地图时,GeoWebCache会拦截这些调用,返回经过缓存切片处理的地图文件,提高地图显示速度。
(4)混合数据库层:由商业数据库 Oracle和开源数据库PostgreSQL/PostGIS组成,用来实现Argo数据中的非地理数据和地理数据的分离检索。Oracle是成熟的商业数据库软件,用来存储海量的非地理属性数据,可以提供高效的数据库支持。PostgreSQL/PostGIS是目前世界上最先进的开源数据库,其中内嵌的空间数据库模块PostGIS,对Argo空间数据结构有着完善的支持及具有强大的空间分析能力。
(5)原始数据层:包括位于国家海洋局第二海洋研究所的“中国Argo实时资料中心”提供的ASCII码Argo数据格式,以及和Argo数据相关地理空间文件,如国界图、海岸线图等。这些原始数据为混合数据库层和GeoServer提供数据源。
Argo数据共享服务系统的功能主要包含普通用户对于浮标信息的查询、导出、GIS操作,以及系统管理员进行的数据维护和更新。其系统功能示意图如图2所示。
(1)数据导入:该功能块包括元数据、剖面数据的单个文件导入和批量导入。
(2)数据更新:该功能块包括单个剖面数据更新和批量剖面数据更新。
(3)参数设置:该功能模块主要提供系统的基本参数设置,参数设置模块主要是为了系统的可扩展性和可维护性。
(4)数据查询:该功能块包括浮标基本信息、剖面信息和 GIS地理信息的查询这三种查询模式。三种查询功能是整个系统的核心模块,具有共同的查询过滤条件。
(5)数据导出:该功能块包括少量数据直接导出和批量数据导出,用于用户在获得查询结果后导出结果数据,结果数据格式和Argo浮标数据格式相同。
(6)使用帮助:该功能是为初次使用本文系统的用户提供一个快速了解系统功能的渠道,还可帮助用户了解Argo元数据和剖面数据的存储格式。
针对海量 Argo数据的基本信息、剖面信息和GIS地理信息查询功能,在数据库设计时主要考虑如何高效地实现查询。数据模型采用地理数据和非地理数据分离的模式,充分利用 Oracle的海量数据检索能力和PostgreSQL/PostGIS的空间分析能力。
在设计数据库的过程中,对从Argo文件中提取的数据进行拆分处理,如图3所示,在Oracle数据库中建立元数据、浮标剖面基本信息、部署信息、浮标详细观测数据4张表,在PostGIS数据库中建立元数据地理信息、浮标剖面地理信息2张表。
图2 系统功能组成图Fig.2 Function and organization of the system
图3 Argo原始文件和混合数据库表对应图Fig.3 Map between Argo primitive files and mixed database tables
由于Argo数据量比较大,在利用Oracle数据库进行数据检索的过程中,需要优化数据库以提升性能,主要通过建立索引的方式提升查询效率,在经常查询但不频繁更新的列上建立索引。
在对浮标数据进行解析的过程中,充分发挥PostGIS的空间分析能力,将地理数据存储为PostGIS集合实体类型,如 POINT,LINE等,利用PostGIS提供空间操作和分析函数进行GIS检索。
在WebGIS系统中,空间地理数据的分析、计算和渲染过程消耗大量的 CPU资源,成为系统性能瓶颈,瓶颈所引发的较长系统响应时间会造成不好的用户体验。本文系统中,主要采用GIS数据缓存的方法来消除系统瓶颈。处理过程为:当用户向GIS服务器发送请求时,缓存服务 GeoWebCache拦截请求,如果该请求没有处理过,则对地图图片进行切片处理并保存到文件缓存服务器,同时返回处理结果;如果该请求曾经处理过,则直接从地图文件缓存服务器返回地图切片图片,而不需要再次重新计算,处理流程如图4所示。这种工作方式可以提高地图的显示速度,缓解GeoServer服务器的工作负荷,实现较为平滑的用户体验。
WebGIS具有实时交互、频繁与服务器通讯并以GML或图片传输数据的特征。对于传统的Web操作,每次客户端请求完成后都要刷新客户端浏览器。这种处理方法给 GIS操作带来了很多不便,比如用户在同一个网页中先后进行GIS查询和其他非GIS查询操作,在传统的网络应用模式下将返回新的HTML页面,这样将不能在网页中保留先前 GIS查询结果,用户需要重新输入组合查询条件进行查询,从而造成很不友好的用户体验。本系统通过Ajax技术来实现用户平滑的GIS操作,Ajax模型与传统网络应用模型的不同之处在于服务应答的异步性。这意味着客户端和服务器端不必相互等待,而是可以进行并发操作。
图4 GIS数据缓存处理流程图Fig.4 Process flow diagram of GIS data cache
OpenLayers是一个开源的JavaScript框架,用于在浏览器中实现地图浏览的效果和基本的放大、平移等功能。在Ajax应用方面,OpenLayers的Ajax类对创建 XMLHttpRequest对象的过程进行了很好的封装,可以使用该类进行相关 Ajax操作。具体请求模式如图5所示,客户端向服务器发出数据请求,OpenLayers Ajax引擎以异步调用的方式将此次请求以参数的形式发送给地理信息服务 GeoServer,GeoServer在对空间数据库PostGIS进行检索后,将返回数据以GML或者图片的格式返回给OpenLayers Ajax引擎,并由其进行结果渲染。
图5 WebGIS中Ajax请求模式图Fig.5 Ajax request mode in WebGIS
基于本文所提出的系统设计和关键技术方案,选用 Windows 2003 Server 网络服务操作系统、Oracle 10g 和 PostgreSQL/PostGIS 数据库管理系统为系统基本平台,以JAVA作为开发语言,采用基于MVC模式的Struts作为J2EE架构来进行系统的开发。图6是Argo基本信息查询界面,用户可以根据系统提供的组合过滤条件查询自己科研需要的Argo数据。在查询后得到Argo浮标基本信息列表,单击图6基本信息列表中对应的浮标号,可以得到对应浮标在具体时间的剖面数据,如图7所示。单击图6列表中浮标条目对应的详细操作链接,可以得到对应浮标的基本信息,如图8,包括元数据的详细信息以及浮标对应的基本观测信息。图9是Argo浮标 GIS查询操作界面,查询结果以地图的形式在浏览器中显示,在地图中点击选中相应结果浮标可以查看该浮标的基本信息。
图6 Argo基本信息查询界面Fig.6 Argo basic information query
图7 Argo剖面信息查询结果图Fig.7 Argo profile information query
图8 Argo浮标详细信息图Fig.8 Argo detail information
图9 Argo地理信息查询界面Fig.9 Argo GIS query
本文提出了基于WebGIS的Argo数据共享服务系统架构,利用当前 WebGIS前沿技术和成熟的J2EE系统开发模式,实现了Argo浮标数据查询、导入、更新、数据提取和 GIS操作等功能。本研究的实例系统已在国家海洋局第二海洋研究所的中国Argo实时资料中心试运行,试运行结果表明系统可满足Argo资料用户的使用需求,为广大Argo数据研究者提供了一种更方便快捷的技术手段。
[1]许建平.阿尔戈全球海洋观测大探秘[M].北京:海洋出版社,2002:5-10.
[2]孙朝辉,刘增宏,滕骏华,等.Argo数据的网络可视化集成平台开发及其应用[J].海洋技术,2006,25(3):l35-139.
[3]美国Argo数据中心.Argo数据浮标资料存档[DB/OL].(2004-03-23)[2011-01-08].ftp://usgodae1.fnmoc.navy.mil/pub/outgoing/argo/.
[4]宁鹏飞.基于数据库技术的 Argo光盘数据集构建与应用[D].杭州:国家海洋局第二海洋研究所,2008.
[5]滕骏华.Development of online Argo data service platform based on GIS[R].杭州:国家海洋局第二海洋研究所,2006.
[6]刘仁义,刘南,尹金峰,等.全球海洋环境观测数据(Argo)及 ArgoGIS 系统[J].自然灾害学报,2004,13(4):93-98.
[7]卢海滨,郑文峰,银正彤,等.羌塘国家自然保护区环境 GIS系统[J].物探化探计算技术,2009,31(1):64-68.
[8]李 鹏.地理信息服务的研究与实现[D].广州:中山大学,2007.
[9]吴运超,王汶,牛铮,等.Ajax在 WebGIS中的应用[J].地理与地理信息科学,2007,23(2):43-46.