APP下载

铁路电子地图离线数据轻量化存储技术

2020-10-09年秋慧王英杰李聪旭封博卿

中国铁路 2020年7期
关键词:字符串空间数据瓦片

年秋慧, 王英杰, 李聪旭, 封博卿

(1. 中国铁道科学研究院集团有限公司,北京 100081;2. 中国铁道科学研究院集团有限公司电子计算技术研究所,北京 100081)

0 引言

我国铁路线路分布辽阔,是国民经济的大动脉。截至2019 年底,全国铁路运营里程达到13.9 万km[1]。《铁路“十三五”发展规划》提出,到2020年,铁路运营总里程将达到15万km[2]。面对密度大、跨度长的铁路基础设施投入运营,以及铁路各专业管理的设备设施与空间信息紧密相连,数量庞大、类型众多、管理复杂等情况,建立了铁路地理信息平台对数据进行统一存储和管理[3],铁路业务应用系统通过访问部署于铁路内网的铁路地理信息平台实现对电子地图的查看与使用。由于网络覆盖范围、关键设施信息安全等因素限制,在铁路不少业务领域对移动端铁路电子地图有使用需求。

黎慧斌等[4]探讨了移动终端离线电子地图系统的总体设计思路,指出系统设计开发时应重点考虑的问题。戴传飞[5]详细分析了SQLite 的体系结构,深入研究了接口、编译器、引擎以及存储层的实现机制。黄伟明等[6]提出一种基于扇形筛选法的矢量数据压缩方法,实现对数据的高效压缩。在此,基于当前研究成果和铁路空间数据存储现状,将多种压缩方法进行融合,实现铁路空间数据轻量化存储,满足移动端铁路电子地图的使用需求,共同推进铁路地理信息系统(RGIS)与智能高铁的建设[7]。

1 数据库选取

铁路地理信息数据按数据来源分为国家基础地理信息数据、铁路专业公用地理数据和铁路专业专用地理信息数据;按展示要素分为铁路线路、车站、管界及驻地、工务、电务、供电及给水、房建、台账数据等;按数据存储形式分为 .jpg、.png、.tif、.dwg、.dxf、.shp、.kml、.geosjon等[8]。为保证数据轻量化存储应选取合适的数据库。不同移动端数据库的优缺点对比见表1。

表1 移动端数据库的优缺点对比

移动端软件大部分采用java语言进行开发,而铁路地理信息数据支持SQL语言查询,根据表1数据库的对比,选取SQLite数据库对铁路空间数据进行存储。

2 空间数据轻量化存储

空间数据分为栅格数据和矢量数据,通过数据量轻量化、数据结构轻量化和数据库轻量化实现数据的轻量化存储。空间数据轻量化存储流程见图1。

图1 空间数据轻量化存储流程

2.1 栅格数据轻量化

对栅格数据进行存储时,首先需要将栅格数据分割为1 组瓦片存储在服务器端[9],然后建立合适的数据索引结构对瓦片进行存储,实现地图数据的快速读取和查询。最后,采用JPEG2000 标准对瓦片金字塔进行压缩,实现对栅格数据的轻量化处理。金字塔结构是一种层次结构模型,每层地图瓦片的分辨率从上至下逐渐提高,且每层表示的数据范围均相同。金字塔瓦片地图模型结构见图2。

图2 金字塔瓦片地图模型结构

金字塔的层数为n,矢量瓦片的编码采用[level,(x,y)]的形式,编码顺序为从上至下、从左至右,其中level为瓦片所在的层数,(x,y)分别为瓦片所在的行号和列号。对地图建立金字塔模型的流程见图3。

图3 地图金字塔建立流程

2.2 矢量数据轻量化

矢量数据包含几何数据和属性数据,而在铁路建设及运输生产中的数据大多数为几何数据,所以对矢量数据压缩的问题就转变成了对几何数据的压缩。几何数据压缩可以从缩减数据信息量和简化数据存储结构两方面考虑。

2.2.1 Douglas-Peucker有损压缩算法

数据信息量简化即在保证图像分辨率以及清晰度不变的前提下,对数据进行缩减。Douglas-Peucker 算法是矢量数据的有损压缩算法。算法主要是对线要素和面要素的信息量进行缩减,在对线要素进行数据量压缩时,采用Douglas-Peucker 算法,按照线要素的拓扑关系,将线要素转换为曲线段,筛选出过滤后的坐标点,组成新的线要素。在对面要素进行压缩时,首先进行信息等效转换,按逻辑规则将面要素转换成线要素,并对转换后的线要素采取Douglas-Peucker 算法进行压缩,最后将线要素按照同样逻辑规则生成新的面要素,实现对面要素的压缩。经Douglas-Peucker 压缩算法对矢量数据处理后,数据信息得到了有效的缩减。

2.2.2 几何坐标变换

对于点数据的简化,通过对数据进行重排,计算数据偏移量并进行存储,而不是传统的对原始坐标的存储。此方法可以在不改变地图展示范围和展示效果的情况下,调整数据的存储结构,对数据进行无损压缩,实现数据存储空间的有效利用。

地理信息二维数据坐标点包含经度数据和纬度数据,坐标点的数量为total,初始序列为l0,坐标点CO0(xi,yi)(i≥ 1),压缩过程大体如下:

(1)对全部坐标点按照xi的值进行从大到小排列,设此序列为l1,坐标点CO1(xj,yj)(j≥ 1)。

(2) 设xj的偏移量为Cxk,Cxk=xj-xj-1(j≥ 2),

(3) 保持l1中第1 组坐标(x1,y1)不变,对余下坐标点按照yj的值进行从大到小排列,设排序后的序列为l2,坐标点CO2(xn,yn)(n≥ 1)。

(4)记录yn和yj的映射关系。

(5) 设yn的偏移量为Cyt,Cyt=yn-yn-1(n≥ 3),

(7)将(经度Exi,纬度Eyi)作为坐标的最终值。

经过无损压缩后,数据有效地减少了对空间的存储占有量。对线要素进行此压缩方式时,可按照一定的转换规则将线转换成等效点,再按原规则转换回线要素;对面要素压缩时,可按照由面化线、由线化点的思想实现面的压缩。

2.2.3 LZW无损压缩算法

改变矢量数据存储结构实现数据压缩的另一种方法是串表压缩算法(LZW),LZW 压缩是基于数据字典编码的一种压缩算法,即可实现对几何数据的压缩,又可实现对属性数据的压缩,算法简单快速、易于硬件实现、压缩效果较好,且可通过一次性读取全部数据实现数据的存储[10]。首先建立1 个空字典,字典中存储字符串前缀,将可能出现的字符依次存入字典中,并进行编号。在对数据读取过程中,采用按位读取,若字典中存在匹配的字符串,则继续向下读取;若字典中无匹配的字符串,则将当前字符串作为新的字符串前缀存储到字典中进行编码,并记录字符串前缀的编号,然后将该字符串的下一位字符设置为新的字符串前缀,并向下进行字符串匹配。反复重复此过程,直至数据全部读取完毕,并将字典和编号组成的字符串存储到数据库中。

由于铁路专业的矢量数据规模庞大,单采用LZW算法对于几何坐标点的压缩存储可能存在数据冗余的问题。可先对数据采用BWT 算法,BWT 算法常用于基因序列的检测,通过对字符串进行循环位移,使相同的字符位置连续或者相邻,但是字符串的长度并没有发生变化。经BWT 算法处理后的矢量数据,冗余度明显降低,再通过LZW 算法对数据进行存储,实现矢量数据的无损压缩。

2.3 空间数据存储

压缩后的数据应基于MBTiles 规范进行存储并制作成离线包,通过服务器端生成地图瓦片。基于MBTiles规范和SQLite 数据库存储的数据可满足查询和读取速度快的要求,还具有可移植性好、操作简便的特点[11]。

3 应用实例

移动端电子地图检索系统应实现铁路专业电子地图信息的查询和获取,以满足铁路线路规划、运营管理、应急救援、检测维修等领域的需求。为了确保铁路数据安全,系统在移动终端的安装部署及使用均在无网络连接的状态下进行。同时,为保证数据及时更新,系统将通过内置应用与服务器进行交互,实现移动终端数据更新。

系统采用SQLite 数据库对基于MBTiles 规则的地图数据进行存储,文件存储形式见图4。采用Android 平台对系统进行检测,经系统测试,栅格地图响应速度为0.5 s,矢量地图响应速度为1.1 s,空间数据查询响应速度为3 s。同时,压缩前的数据量为144 GB,压缩后的数据量为19.2 GB,数据压缩率为86.667%,实现了在保证可视化效果条件下对数据的轻量化存储。移动端电子地图检索系统经轻量化存储后的数据最终展示效果见图5。

4 结束语

通过选取基于MBTiles 规范的SQLite 数据库,设计并建立基于四叉树结构的金字塔模型,实现数据的快速定位和检索。采用Douglas-Peucker 算法、几何坐标变换、BTW 算法和LZW 算法对数据采取轻量化处理。压缩后的数据量实现了较大缩减,满足了离线地图数据轻量化存储的需求。

图4 基于MBTiles规则的地图数据存储形式

图5 系统展示效果

猜你喜欢

字符串空间数据瓦片
打水漂
基于文本挖掘的语词典研究
一种基于主题时空价值的服务器端瓦片缓存算法
GIS空间数据与地图制图融合技术
惯性
SQL server 2008中的常见的字符串处理函数
倍增法之后缀数组解决重复子串的问题
最简单的排序算法(续)
网格化存储的几项关键技术分析