sqlite浅谈利用SQLite存储离散瓦片的思路和落实格局

著作版权由作者李晓晖和网易共有,若转载请于显著处标明出处:http://www.cnblogs.com/naaoveGIS/

1.背景

在三个类型中提到到互联网地图的内网彰显,通过自制工具完成了互联网地图的瓦片下载。但是此种方法存在如下几个问题:

a.瓦片均是离散型图片,远程部署异常耗时。

b.瓦片下载中,涉及到将互联网瓦片下载至内存,然后建立相应文件夹,然后保留至本土的长河,效能不高。

除去以上五个问题外,还有存储占用相比多等等缺点。是否有类似于ArcGIS的Bundle型瓦片社团格式来解决存储占用、远程部署等已有问题的化解方案?

  sqlite 1                     

2.自定义Bundle格式

2.1采纳Sqlite举行仓储

2.1.1Sqlite的优点

a. 轻量级

SQLite和C/S格局的数据库软件不同,它是过程内的数据库引擎,因而不设有数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就足以大快朵颐它的所有效果。

这般相当有益我们将其用作一个文件来对待。

b. 单纯性文件

所谓的“单一文件”,就是数据库中持有的音讯(比如表、视图、触发器、等)都带有在一个文件内。并且这些文件可以copy到其余目录或此外机器上,也一致可以动用。

通过这么些单一文件性,我们便足以将我需要离散存储的文本举行合并保管了。

c. 跨平台/可移植性

除外主流操作系统,SQLite还协理了广大冷门的操作系统,比如Android、Windows
Mobile、Symbin、Palm、VxWorks等的支撑。

两遍存储,多点采取。

d.内存数据库(in-memory database)
眼前内存越来越廉价, SQLite的内存数据库特性就一发显得好用。SQLite
的API不区分当前操作的数据库是在内存依旧在文书(对于存储介质是晶莹的)。所以一旦你以为磁盘I/O有可能变为瓶颈的话,可以考虑切换
为内存形式。切换的时候,操作SQLite的代码基本不用大改,只要在起头时把公文Load到内存,截止时把内存的数据库Dump回文件就足以了。

在仓储瓦片时,尽管瓦片数据不算多,内存充分用,能够切换为内存模式,进一步提升瓦片读取功效。

2.1.2缺点

a.并发访问的锁机制

SQLite在产出(包括多进程和多线程)读写方面的属性一向不太出色。数据库可能会被写操作独占,从而致使其他读写操作阻塞或出错。

b. SQL标准援助不全
在它的官方网站上,具体列举了不协理什么SQL92正式。

2.2 瓦片以MBTiles规范开展公司

MBTiles
是一种地图瓦片存储的多寡正式,可大大提升海量地图瓦片的读取速度,比通过瓦片文件措施的读取要快很多,适用于Android、IPhone等智能手机的离线地图存储。

MBTiles通过视图,可以重复使用冗余瓦片数据,从而裁减瓦片占用的上空,而不是一个纯粹的、文字表。比如:地图覆盖广泛的纯藏蓝色像大海或空的土地,造成很多的双重、冗余的瓦片数据,例如,4/2/8的瓦片在印度洋当中,可能看起来就是一张青色图片尽管它或许是部分处于第3级,但在16级可能存在巨额的红色图片,他们都完全平等。

MBTiles通用方法是将瓦片表分成两张:一个用来储存原始图像和一个仓储瓷砖坐标对应那多少个图片。具体设计如下:

a.设计map表

 sqlite 2

对瓦片行列号以及对应的瓦片ID举行仓储。

b.设计images表

 sqlite 3

对瓦片举行仓储。

c.设计视图tiles

 sqlite 4

基于map和images生成。

3.支出瓦片下载和包装存储工具

3.1瓦片下载工具

瓦片下载工具基于瓦片寻址算法开发,针对不同互联网地图,瓦片的行列号算法等稍有两样。尤其是对准百度地图,其瓦片算法会遵照百度的瓦片分级偏移规则展开折算。那里不做累述。

sqlite 5 

3.2依据MBTiles规范开展仓储

计划思路为:

a.多线程瓦片下载,内存中开辟容器池。

b.当内存容器池满后,举办完全入库至sqlite。入库时开展上锁,规避Sqlite对多事务帮助不出色问题。

 sqlite 6

4.改建后端举办测试

4.1改建后端

后端按照连接池的合计,协理通过行列号在Sqlite中读取到瓦片。

4.2前端测试

 sqlite 7

5.方案优点总结

a.提升瓦片下载存储速度。经测试,比当地图片存储形式效用至少提高一倍。重假诺因为,一是二进制存储,无转换过程。二是减掉各层级文件夹建立耗时。

b.缩小存储空间。MBTiles规范可以削减冗余瓦片。

c.便于数据转移。所有瓦片存储于一个文本夹中,便于数据转移部署。

d.提升海量地图瓦片的读取速度,比通过瓦片文件模式的读取要快很多。原因为单个文件不再涉及到目录寻址,并且也不需要将瓦片读取为二进制再传出。

6.待测试

由于sqlite本身对多事务帮助不是很出彩,大并发访问瓦片的景观还需测试。下一步准备利用Jmeter举行测试。

7.扩大使用

脚下矢量切图工具,存储的也均是离散型的PBF。使用MBTiles举行仓储,也能实现方便安排的目标。并且,一个图层使用一个视图,这种概念与ArcGIS中的图层入库也尤为相似。

 

                                                       
 —–欢迎转载,但保留版权,请于分明处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                          
如若你认为本文确实帮忙了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢
^_^

                                      sqlite 8

 

网站地图xml地图