技术交流

您当前位置:首页>>技术交流 >> 技术交流

一种可扩展的分布式地图发布技术研究

发布日期:2016-09-30 发表者:王怀州 夏璟 翁敬农 浏览次数:48次

摘要:随着地图数据的不断增长,实现地图的快速共享与分发已经成为空间信息科学领域研究的重点关心问题之一。虽然目前有很多大型地图数据服务提供商,如NASA、Google Maps、Bing Maps等,或轻量级的地图服务系统,如GeoServer、ArcGIS Server、World Wind Server等都有着一定程度的限制。所以本文通过讨论影像金字塔结构、基于WMS请求的地图发布方法以及可扩展的地图发布方法,提出了一种可扩展的分布式地图发布技术,对于快速搭建地图发布服务系统具有一定的参考价值。

关键词:影像金字塔;WMS服务;分布式;地图发布


1  引言

随着地图数据获取能力的不断增强,可利用的地图数据成倍增加,已经有了PB级的发展趋势。李德仁院士认为:如何更有序,更高效地存储与管理海量地图数据,形成统一的存储组织标准,实现地图信息的快速共享与分发,已经成为空间信息科学领域研究,业务应用部门和机构重点关心的问题之一。虽然目前有很多大型地图数据服务提供商,如NASA、Google Maps、Bing Maps等,它们可以提供全球大部分陆地的较高分辨率的地图数据及全球主要城市的10米以下分辨率的地图数据。但是这样的服务有着两个较大的弊端:一方面是请求方需要实时接入互联网,并且需要一定的带宽保障与网络稳定性;另一方面是无法适应地图数据的扩展与其他的分析应用需求。对于轻量级的地图服务系统,如GeoServer、ArcGIS Server、World Wind Server而言,虽然可以脱离互联网并且可以实现地图数据的扩展需求,但是其仍有着发布能力的限制,如GeoServer需要借助GeoTools的ImageMosaic和ImagePyramid等插件实现对发布地图影像数据的支持。

本文主要讨论一种可扩展的分布式地图发布技术,一种基于WMS服务标准的轻量级的地图发布解决方法。同时可以支持海量地图数据的扩展,以及对其他地图服务系统的支持。本文将从总体设计到具体的实现技术分别讨论如何实现一个轻量级的地图发布服务。


2  总体设计


对于海量的地图数据而言,无论从数据的存储能力或者是处理能力考虑,单一的发布服务器一定是远远不能满足需求的。所以,要实现海量地图数据的发布共享,就需要应用分布式的架构,如图1所示。


 1 分布式架构示意


图1中核心服务器负责维护服务列表并相应客户端的WMS请求。服务列表的内容包括:图层名称、显示范围、服务地址以及备份标记。核心服务器接收到客户端的WMS请求后,进行请求解析并在自己的服务列表中进行匹配,如果匹配成功则将该WMS请求进行相应修改并转发给匹配上地址的服务器,它可能是另一个核心服务器或者是一个数据服务器。在核心服务器中的服务列表是自学习的,在最初配置好之后将托管给服务器自身进行修改和完善,即当数据服务器返回一个数据获取异常时,在通知异常的XML中会给出该数据服务器的数据内容列表,核心服务器根据该XML修改自身的服务列表,以及时适应数据的变化。同时,核心服务器还要维护服务列表中的服务器状态,以防止某一个或几个服务器因故障停止服务后立即启用备份服务器,从而保证整个地图服务的正常工作。

数据服务器负责存储和发布地图数据,并与核心服务器进行交互。数据服务器同样也维护一个自己的数据列表,内容包括:图层名称、显示范围、瓦片跨度、金字塔层数等元数据信息。如果要对数据进行更改,则需要重新配置数据列表并重启服务。

在数据服务器端,对地图数据的组织和管理是一个关键的环节。本文将讨论如何应用影像金字塔结构对其进行组织。同时,如何将组织好的数据发布到网络中。关于地图数据的发布,本文将讨论基于WMS请求的地图发布方法。而在核心服务器端,本文将讨论一种可扩展的地图发布方法,实现对单一图层数据量过大的发布。


3  影像金字塔结构

对于一个地图客户端而言,一次性加载一张完整的地图需要消耗大量的带宽资源和时间。而根据当前的观察范围与高度给出适当的分辨率是更好的选择,即LOD(Level of Detail,层次细节模型)的概念。同时对于数据服务器而言,当响应每次的小范围地图请求时需要进行大量的空间计算和图片渲染操作,这样大大地消耗了服务器的CPU时间,对于高并发的请求时段数据服务器的响应时间将会是无法令人满意的。基于以上两点的考虑,为了提高请求的响应效率,对于大范围的地图数据需要进行瓦片切割操作,同时建立影像金字塔结构。

建立影像金字塔需要预先将大的地图切割为256×256 像素的瓦片(也可以使用其他大小),通常选择“2倍率”缩放比例构建的瓦片金字塔,因为其具有相当高的存取效率。研究Google Maps可以发现,其瓦片从0级开始,全球大部分区域都可以达到21级,极少部分区域达到23级,瓦片的大小为256×256像素,上面一级的1块瓦片的显示范围为下面一级同样位置的4块瓦片显示范围之和,即为四叉树结构如图2所示。Google Maps通过此影像金字塔结构实现了从比例尺为1:1000公里的一副循环的世界地图图片到分辨率最高的1:2米城市街道地图的高效缩放操作。


图2 影像金字塔结构示意


影像金字塔结构在赢得了处理与响应速度优势的同时,也付出了占用更多空间的代价。根据四叉树结构的特点可以得出下面的计算:

公式1中n为金字塔级数,一般来说n取值在3~8之间,所以可以认为约多占用原始大小30%的空间。作为用空间换取时间的典型例子,在目前计算机存储能力有了大幅提升的今天,这个结果是令人满意的。

而且开源的GDAL库(Geospatial Data Abstraction Library)提供了可以切割瓦片建立金字塔结构的方法。它使用以数字命名的文件夹来代表一个缩放级别,在每一个文件夹下瓦片以name_r_c命名,name代表地图名称,r代表行号,c代表列号。在生成上一级的瓦片时,可以使用双线性插值方法来完成图像的缩放。它比最邻近法的结果在灰度上更连续,同时比三次曲线插值法的计算量小很多,是图像缩放经常使用的方法。不过,它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。但对于由远及近的视觉效果而言,图像轮廓的模糊是符合人们感知的。


4  基于WMS请求的地图发布方法

WMS是OGC标准中比较简单也是比较重要的标准之一。它全称是“Web Map Service”,即网络地图服务。此标准主要定义了用于创建和显示地图图像的三大操作:GetCapabilities(获取服务能力)、GetMap(获取地图)和GetFeatureInfo(获取对象信息)。GetCapabilities和GetFeatureInfo两个操作分别是获取服务器级元数据和获取显示在地图上的某些特殊要素的信息。其中GetMap为本文重点讨论的操作,此操作得到一幅地图图像。GetMap操作的参数如表1所示。

表格 1 GetMap请求参数表

请求参数

强制/可选

描述

VERSION=1.3.0

强制

请求版本

REQUEST=GetMap

强制

请求名称

LAYERS=layer_list

强制

地图图层列表。多个图层逗号分隔。服务器渲染图层时,按照从左到右的顺序渲染。即:最左面的图层,处于渲染结果的最底层。

STYLES=style_list

强制

样式列表。多个样式列表逗号分隔。与LAYERS参数的值是一一对应的关系。

CRS=namespace:identifier

强制

坐标系统

BBOX=minx,miny,maxx,maxy

强制

一组逗号分隔的坐标值,用于指定请求数据的地理范围。

WIDTH=output_width

强制

地图图片的宽度像素值

HEIGHT=output_height

强制

地图图片的高度像素值

FORMAT=output_format

强制

地图输出格式

TRANSPARENT=TRUE|FALSE

可选

地图背景是否透明,默认为FALSE

BGCOLOR=color_value

可选

背景色,使用16进制字符串表示,0xRRGGBB

EXCEPTIONS=exception_format

可选

异常,默认为XML

TIME=time

可选

期望地图的制作时间

ELEVATION=elevation

可选

地图的高程

Other sample dimension(s)

可选

允许客户端请求除时间、高度以外的多维图层。

其中LAYERS和BBOX为描述具体请求的地图范围。所以,对于地图数据的发布而言,解析WMS服务请求中的LAYERS和BBOX参数,并将其转换为统一的空间索引,将是地图发布的关键一环。

对于影像金字塔结构的地图瓦片数据而言,有很多种目录结构的存储方式。本文以其中一种可行方案为例。最顶层是以地图名称命名的文件夹,下面是以金字塔层数命名的子文件夹,再下一层是以行号(Y)命名的子文件夹,最后是以行号列号(Y_X)命名的地图瓦片数据。其中行号列号是指以西经180°南纬90°为原点,以一个定长的跨度?为单位长度将全世界分成网格,然后从0开始计数所得到的。

对于WMS的GetMap操作而言,BBOX参数为请求区块左下角点的经纬度以及右上角点的经纬度数据,可表示为minX、minY、maxX、maxY。将其转换为目录结构所使用的行号列号的公式如下。

公式2中L为影像金字塔层数。而且本文讨论的是普遍的WMS请求情况,即请求区域为一个正方形。所以maxX-minX=maxY-minY。而其中的?为第0层瓦片的单位长度(经纬度跨度)。


5  可扩展的地图发布方法

对于地图发布而言,比较难处理的是一些过大的图层,即一张地图的分辨率非常高,导致这张地图的大小达到几十GB的级别,从而使得单一的数据服务器无法满足发布要求。而另一方面,客户端又希望这是一张完整的图层,仅需要对它进行与其他图层一样的配置即可。

为解决这种问题,本文给出一种可扩展的地图发布方法,即可以将一张过大的地图切分成若干个不同的区域分别发布于不同的数据服务器上,然后通过核心服务器进行整合。这样对客户端而言,无论这个图层被分成多少个区域,都只需要当作一个普通图层进行对待。

在客户端请求的区块落在某一个区域中时,核心服务器只需要向持有该区域的数据服务器进行请求数据即可。但是,客户端的请求区块有可能是跨越多个区域的。这时核心服务器就需要判断出它跨越了哪些区域,并且是如何跨越的这几个区域,从而分别将每一部分得到再进行拼接,最后返回给客户端。

解决这个跨区域问题的关键在于如何判断出请求的区块与分布式存储在各个数据服务器上的区域的交集。前提条件为请求区块是个正方形区块,且分布式存储在各个数据服务器上的地图区域一定是矩形。所以可以得出它们之间有36种位置关系,如图3所示。


图3 位置关系示意


图中实线围成的矩形代表某一区域,图中的数字代表请求区块左下角的点在当前区域中右上角的点有几种可能的位置。在这36种可能的位置关系里面,要判断出两个区域的交集,容易得出一共有16种位置关系符合有交集条件。


图4 有交集的位置关系示意


经过分析可以得出在这16种位置关系中有一个共同的特性,即方形区块的某一条边一定穿过矩形区域(除去方形区块完全包含矩形区域情况外)。这样进行抽象以后,可利用计算机进行边的比较来得出交集区域,以达到区域判断的效果,同时还能得出交集的具体位置。


6  应用验证

验证共发布了31.5GB的地图影像数据,搭建了一个核心服务器和三个数据服务器,其中一个为备份服务器。

本文应用NASA开源数字地球软件World Wind的Java版本进行地图发布应用验证。具体应用了World Wind的WMS示例小程序。其主要的功能为解析WMS服务Capabilities的XML文件,并按照WMS服务所发布图层的显示范围与层级进行标准WMS的GetMap请求,然后将请求得到的地图影像瓦片渲染在数字地球的三维视场中。用户可以通过旋转与缩放来改变观察范围与角度,同时应用程序根据用户当前的观察范围进行地图数据的获取与展示。通过使用该应用程序浏览了所有发布的区域,显示效果符合预期,同时也做了一定程度的并发请求测试,整个服务运转稳定,在局域网条件下的平均响应时间为50ms左右。图5为通过该程序所查看到的2008年北航的航拍图的发布效果。


 5 2008年北航航拍图发布效果


通过验证,证明本文提出的地图发布技术对于实现一个轻量级的地图发布服务有很好的效果。适用于快速搭建一个独立的地图发布服务。


7  结论

本文介绍并讨论了可扩展的分布式地图发布相关技术,包括影像金字塔结构、基于WMS服务的地图发布方法以及扩展的地图发布方法,并给出了具体的实现方法。同时结合World Wind数字地球平台实现并验证了本文所讨论的地图发布技术,通过验证效果可以证明本文所给出的地图发布技术的可行性与先进性。对于搭建轻量级的地图数据服务系统具有很好的参考价值。

下一步的研究可以结合地图数据的多源异构特性进行对不同数据格式与组织形式的支持,同时增加分布式系统的负载均衡能力等。

(高校GIS论坛优秀论文)

 

参考文献

[1]     Yanhua Zhuang, Xingjian Liu, Thuminh Nguyen, Qingqing He, Song Hong. Global remote sensing research trends during 1991–2010: a bibliometric analysis[J]. Scientometrics (2013) 96:203–219

[2]     Jixian Zhang. Multi-source remote sensing data fusion: status and trends[J]. International Journal of Image and Data Fusion. 2010(2): 5-24

[3]     Lianbei Wang, Xin Wang, Tao Wang. The Research on Remote Sensing Image Data Sharing Model Based on SOA[J]. CSE 2011, Part II, CCIS 202, pp. 86–92

[4]     李德仁. 摄影测量与遥感学的发展展望[J]. 武汉大学学报(信息科学版), 2008, 33(12): 1211-1215

[5]     李德仁, 邵振峰. 论新地理信息时代[J]. 中国科学F辑: 信息科学, 2009, 39(6): 579-587

[6]     J. N. WENG, Y. J. WANG and H. Cai. Constructing a core framework of visual engine for Digital Earth system[J], Science China Technological Sciences. 53 (2010) 38-43

[7]     XU Zi-zhou, SUN Shu-yan, LIANG Bin, SONG De-rui, ZHANG Yun, BAO Chen-guang. Technique for mass image data management and publication based on ArcGIS[J]. Marine Environmental Science, 2014(33): 99-104

[8]     LIU Xi-mei, NIU Zhen-guo, GAO Guang-ming. Design and Implementation of Retrieval System for Landsat Remote Sensing Image[J]. Geomatics & Spatial Information Technology, 2014(37): 87-90

[9]     GOU Li-mei, ZHU Mei-zheng, LI Yan-ming. Study on web map tile service based on RESTful[J]. Computer Engineering and Design, 2012(33): 3609-3616

[10] XIANG Zejun, XU Zhanhua, RAO Ming, LONG Chuan. Massive Blocks of Map Grid Distribution Method[J]. Bulletin of Surveying and Mapping, 2014(6): 75-78

[11] LI Xiao-bin. Design and Implementation of a Web Map Service Engine[J]. Microelectronics & Computer, 2011(28): 42-48

 

第一作者简介

王怀州,北京航空航天大学硕士,主要从事数字地球与地理信息系统研究。