网络矢量地图瓦片技术研究
2016-12-20朱秀丽周治武彭云璐
朱秀丽,周治武,李 静,赵 勇,彭云璐
(1. 国家基础地理信息中心,北京100830; 2. 中南大学,湖南 长沙 410083)
网络矢量地图瓦片技术研究
朱秀丽1,周治武1,李 静2,赵 勇1,彭云璐1
(1. 国家基础地理信息中心,北京100830; 2. 中南大学,湖南 长沙 410083)
随着WebGIS越来越深入人们的生活,人们对WebGIS的响应效率、交互性、渲染效果等方面的要求越来越高。现有的网络地图瓦片服务已不能完全满足人们的需求,矢量地图瓦片技术应运而生。本文主要研究了矢量瓦片的图形数据和要素数据的编码、矢量瓦片的组织存储方式并实现了对矢量瓦片的实时渲染,表明矢量地图瓦片技术克服了传统栅格瓦片的缺陷,在交互性、渲染效果及属性查询等方面具有很大的优势和很高的应用价值。
网络地图服务;矢量地图瓦片;编码;地图样式
地图已经成为人们工作、学习、生活不可缺少的科学工具[1]。随着互联网技术的不断发展与完善,产生了一种全新的地图应用方式——网络地图。尤其是当地图瓦片的概念被提出以来[2-3],地图瓦片服务快速发展和壮大,Google map、Esri online、天地图、百度地图、高德地图等在线地图服务相继出现。这些服务均采用相似的技术,利用金字塔模型缓存多分辨率的栅格瓦片数据,减少了网络传输量,显著提高了网络地图的响应速度,促进了网络地图在人们日常生活中的广泛应用,改变了人们的生活方式。然而由于客户端获取到的是预生成的栅格瓦片图像,在前端的交互性和空间分析等方面还不能完全满足客户的需求,随着HTML5技术的发展,网络地图的矢量渲染克服了以往的瓶颈。矢量瓦片缓存技术开始发挥其优势,焕发新的活力,以Mapbox为代表的矢量地图瓦片服务吸引着越来越多人的关注。本文对矢量地图瓦片技术进行了探讨,并通过试验进行了验证。
一、主要技术
1. 基于网络的地图瓦片服务
网络地图瓦片服务(web map tile service),是一种基于瓦片的网络地图服务,它以瓦片为单位组织地图数据[3-4],用户依据所需空间范围获取地图瓦片数据,实现对局部地图的快速访问。网络地图瓦片服务依据一定的数学规则,把地图按照固定的多级比例尺分层,并从每层图片的左上角开始,按照从左至右、从上到下的顺序切割成相同大小(如256×256像素)的正方形地图瓦片,形成一层一层的瓦片矩阵,构成整个瓦片金字塔。瓦片金字塔(瓦片大小256×256像素)的组成关系见表1。
表1 瓦片金字塔的组成
tile(地图瓦片)技术的出现,将WebGIS向前推进了一大步。地图瓦片技术地解决了客户端请求地图时的渲染效率问题和浏览器兼容问题。在继谷歌地图之后的其他WebGIS地图服务,基本都采用这种技术。矢量数据的瓦片技术也遵循同样的思路,只是分块的数据不是栅格图像,而是矢量数据。当然不管是栅格数据的瓦片化,还是矢量数据的瓦片化,其目的都是通过分块的方式减少网络传输量,从而缩短响应时间,提高用户的体验。而矢量数据的瓦片化,可以更好地实现客户端和服务器的交互。
2. 矢量瓦片的编码技术
栅格瓦片是将图像切割成一个个JPEG或PNG图片,而矢量图层具有多种编码格式,如shapefile、GeoJSON等。为了节省存储空间和方便管理,Mapbox制定了一种矢量瓦片数据的编码方法——Vector Tile规范[5],可以在节省空间的同时实现地图的快速绘制与属性数据的快速查询。Vector Tile运用Google Protocol Buffers作为编码方式,Google Protocol Buffers是一种支持多种语言(如C++、Python等)多平台的可扩展的序列化结构化数据存储格式,通过自定义数据结构可以跨平台跨语言地实现矢量数据的存储,而且它以二进制流形式进行存储,大大节省了存储空间。Vector Tile依据投影坐标及瓦片组织体系,实现地理区域范围与瓦片编号的一一对应关系。每个Vector Tile至少包含一个Layer,每个Layer中又包含其图形要素和属性信息,图形信息被分解成一系列Line to、Move to、ClosePath绘图命令,一个command id代表一种操作,其中1代表Move to,2代表Line to,7代表ColsePath。Line to和Move to均有两个参数,而且每个命令都有一个命令执行次数,参数采取zigzag的编码方式,小的正值和负值的编码均为小整数,因此参数的编码值ParameterInteger的计算公式是ParameterInteger = (value << 1) ^ (value >> 31)(value为参数的实际值)。
·MoveTo(3,6)
·LineTo(5,6)
·LineTo(12,22)
·ClosePath
以上命令的编码如图1所示。
图1 命令的编码
3. 瓦片存储技术
瓦片化之后面临的一个问题是如何合理存储规模巨大的瓦片文件,如16级可能形成上亿数量级的瓦片文件[6],此外还面临快速迁移和离线利用问题。传统文件系统磁盘存储碎片化严重,影响IO性能,且数据可迁移性差,备份、迁移或恢复耗时都很漫长[7]。Mapbox公司制定了一种公开的瓦片管理和存储规范——MBTiles[8]。MBTiles规定将生成的瓦片数据存储在一个SQLite数据库中,形成一个MBTiles文件,即一个瓦片数据集,实现存储空间的集约化。由于SQLite数据库兼容大多数主流平台, 包括移动平台Android、iOS,且具有迁移简单、免安装的特性[9],可以实现地图瓦片的便捷使用、管理和迁移。将MBTiles文件存储在本地,还可以实现地图在移动终端的离线显示。这是对于地图瓦片存储和服务的轻便、简单文件解决方案。
MBTiles文件主要由元数据表(metadata)、tiles视图和grid表组成。
metadata表采用键值对的形式来存储地图瓦片数据的相关设置,包括两个文本类型的字段”name”和”value”。元数据表的各字段(keys)说明见表2。
tiles视图由两个表:map表和images表关联得到,其结构及说明见表3。
表2 metedata表的结构及说明
表3 map表的结构及说明
images表的结构见表4。
表4 images表的结构及说明
tile_data存储PNG或JPG格式图像的二进制流数据或矢量数据经Vector Tile规范编码的二进制流数据。
tiles视图的结构见表5。
表5 tiles视图的结构及说明
使用 tiles 视图的优势在于可以减少冗余瓦片。地图中海洋或空旷的土地等区域包含有成千上万重复而冗余的纯色瓦片,类似太平洋中蔚蓝色的瓦片,在小比例尺中,它可能只有几张,但在大比例尺(如1∶10 000)的地图中,就会存在上百万个单一颜色的蓝色瓦片。MBTiles 通过拆分瓦片索引表map和瓦片数据表images,使用视图的方式来关联二者,这样成千上万的瓦片索引就可以指向同一个瓦片图像,从而大大减少存储冗余的纯色瓦片,提升磁盘利用率及瓦片检索效率。
4. UTFgrid技术和要素属性的利用
在网络地图服务的应用中,如果包含较多的鼠标交互操作,传统做法是在地图上叠加要素图层,每个要素有自己的热点和事件,用于完成鼠标交互。但在大数据量、高并发请求的环境中,客户端尤其是移动终端上,就不能很好地渲染大数据量的地理要素,面临严重的性能问题[10]。这种情况下,出现了一张地图瓦片结合要素属性信息的缓存方式,也就是在地图瓦片之外,额外存储了按照格网划分的要素属性信息。这种预先划分的要素属性信息,称为属性瓦片,目前最具代表性的是MBTiles规范附属的UTFGrid规范[11]。
UTFGrid的解决方式是将这些点或多边形网格化,在每个像素上存储一个字符,不同的属性用不同的字符表示,然后将这个字符表存到JSON结构中。这样,一个256×256像素的瓦片会附着一个256×256字符表,如果2×2像素对应一个grid,那么就有128×128个字符表,每个不同的字符就像一个索引去关联更完整的信息。
UTFGrid瓦片数据是一个便捷的查找表,包括三部分内容:grid二维数组、keys一维数组及data对象。grid二维数组存储了256×256个字符表或128×128个字符表或2n×2n字符表(n≤16),这些字符为unicode字符。keys存储地理要素信息的密钥key。data 是个对象,存储了密钥key对应的地理要素信息。三者之间的关系为:grid中的每一个字符都对应了一个地理要素的Key,通过 Key 才能在 data中找到地图要素的信息,如图2所示。
图2 UTFGrid编码
每个UTFGrid中的字符对应keys映射的不同要素。在上述的格网中,字符映射如下:
! => Portugal(葡萄牙)
# => Spain (西班牙)
$ => Morocco(摩洛哥)
每个像素就是一个触发点,通过与触发点交互实现要素属性的交互和显示。如当鼠标移动到瓦片上时,根据鼠标在瓦片上的相对位置,获取到字符表中相应的字符,如在以上的格网中,4行、58列查找#字符。通过交互获得的字符成为下一步关联其他业务数据的索引,如人口、领土面积等。
5. 灵活地图样式配置
图3所示为矢量瓦片地图样式设置的主要原理。
对于传统的栅格地图瓦片服务,瓦片生成后,用户只能见到一种风格的地图,若要改变风格,必须重新配图和切图,费时费力。而运用矢量地图瓦片服务,用户可以在切片以后,根据自己的需要实时改变地图的样式,并且获得较高分辨率的输出图像,提升了用户交互性和展现灵活性。
图3 矢量瓦片地图样式配置原理
样式化数据是瓦片数据的子集,而瓦片数据通常是用于切片数据源的子集,一套瓦片数据可以支持多种样式化的地图,从而形成多个地图模板(可视化的展示)。
二、应用试验
为了测试网络矢量地图瓦片技术,本文下载OSM的中国数据,基于开源代码,研究了网络矢量地图瓦片的关键技术:矢量瓦片切片、矢量瓦片存储、矢量瓦片多终端显示、矢量瓦片多样式显示、矢量瓦片高分辨率输出等。图4是将道路要素层实时更改其渲染样式得到的结果。
图4 道路图层渲染效果对比
图4的缩放层级为12级,图4中(a)和(b)道路的填充颜色样式不同。试验表明网络矢量地图可以基于瓦片数据,实时改变要素的视觉变量(形状、尺寸、方向、颜色、亮度、密度等),并衍生多种地图表达,数据与可视化是一对多的关系。
三、结束语
本文对网络矢量地图瓦片的部分技术进行了探索,由于其处于蓬勃发展时期,新方法新思想非常活跃,其应用也非常广泛,如基于这些技术研制在线制图系统,实现矢量要素与制图知识的1∶n关联,满足多重制图表达需求,以满足人们灵性制图要求,同时满足网络地图高分辨率输出的要求。
[1] 王家耀,成毅.论地图学的属性和地图的价值[J].测绘学报,2015,44(3):237-241.
[2] 陈超,王亮,闫浩文,等.一种基于NoSQL的地图瓦片数据存储技术[J].测绘科学,2013,38(1):142-143.
[3] 王浩,喻占武,曾武,等.基于瓦片寿命和访问热度的海量空间数据缓存置换策略[J].武汉大学学报(信息科学版),2009,34(6):667-668.
[4] 张广春,仲伟政.基于ArcGIS Engine组件实现瓦片地图的应用[J].测绘通报,2015(3):115-120.
[5] AGAFONKIN V,FIREBAUGH J,FISCHER E,et al.Mapbox Vector Tile Specification[EB/OL].[2016-03-09].https:∥github.com/mapbox/vector-tile-spec/blob/master/2.1/README.md.
[6] 郭明强,黄颖,谢忠.分布式环境下海量瓦片数据实时组织与调度策略研究[J].测绘通报,2013(4):25-28.
[7] 罗智勇,黎小东.基于数据库存储方案的高性能瓦片地图服务研究[J].地理与地理信息科学,2013,29(3):48-51.
[8] MACWRIGHT T,WHITE W,KAEFER K,et al.MBTiles Specification[EB/OL].[2016-02-09].https:∥github.com/mapbox/mbtiles-spec.
[9] 胡菲菲.sqlite在嵌入式电子地图中的应用[J].工程地质计算机应用,2008(2):31-36.
[10] 周强,宋志峰,刘易鑫,等.一种适用于多移动终端的地图瓦片格式的研究与应用[J].测绘与空间地理信息,2013,36(S0):70-76.
[11] MACWRIGHT T,WHITE W,KAEFER K,et al.UTFGrid[EB/OL].[2016-02-09].https:∥github.com/mapbox/utfgrid-spec/blob/master/1.3/utfgrid.md.
[12] 蔡苑彬,刘露,陈荦,等.基于地图制图脚本的交互式图例动态生成方法[J].地理空间信息,2014,12(5):154-157.
Research for Web Map Vector Tiles Technology
ZHU Xiuli,ZHOU Zhiwu,LI Jing,ZHAO Yong,Peng Yunlu
2016-03-11;
2016-05-09
科技基础性工作专项(2013FY112800)
朱秀丽(1975—),女,硕士,高级工程师,主要研究方向为地理信息应急、地理信息标准、GIS工程与地图制图。E-mail:zhuxiuli@nsdi.gov.cn
朱秀丽,周治武,李静,等.网络矢量地图瓦片技术研究[J].测绘通报,2016(11):106-109.
10.13474/j.cnki.11-2246.2016.0377.
P28
B
0494-0911(2016)11-0106-04