基于 MBTiles 规范扩展的缓存文件格式说明

MBTiles 是由 MapBox 制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范。该规范由MapBox制定,详见http://mapbox.com/mbtiles-spec/

SuperMap iServer为了满足自身应用的需求,不仅支持生成和使用满足MBTiles规范的瓦片地图数据,并且基于原规范对MBTiles中的内容进行了扩展。扩展后的.mbtiles文件支持任意坐标系,支持任意分辨率,支持JPG和PNG混合格式的地图瓦片数据。

扩展后的.mbtiles文件仍然使用元数据表”metadata”和瓦片数据表”tiles”来对瓦片地图数据进行管理。

metadata元数据表采用键值对的形式来存储地图瓦片数据的相关设置,包括两个文本类型的字段”name”和”value”,与MBTiles 1.1规范一致。表结构如图1所示:

图1 元数据表的表结构

元数据表的内容举例如表1所示:

表1 元数据表举例


name


value

name World
type baselayer
version 1.1
description World created on 2012-12-17 16:51:22 by SuperMap iServer
format PNG
bounds -180.0,-90.0,180.0,90.0
axis_origin -180.0,90.0

axis_positive_direction

RightDown

crs_wkid

4326
crs_wkt
GEOGCS["WGS 84",

DATUM["WGS_1984",

SPHEROID["WGS 84", 6378137, 298.257223563, AUTHORITY["EPSG", "7030"]],

AUTHORITY["EPSG", "6326"]],

PRIMEM["Greenwich", 0, AUTHORITY["EPSG", "8901"]],

UNIT["degree", 0.0174532925199433, AUTHORITY["EPSG", "9122"]],

AUTHORITY["EPSG", "4326"]]

tile_height 256
tile_width 256
resolutions 78271.516964,529.1666666666666
scales 5.0E-7
map_parameter {"scale":0.00101610071425,"clipRegion":{"center":null,"id":0,"style…
compatible false

元数据表的各字段(keys)说明如表2所示:

表2 元数据表各字段描述

字段名称 是否必须 是否 iServer 扩展 说明
name 地图的英文名称,如果地图名称为中文会自动转换为中文名称的拼音。
type 地图类型,其值可以是overlay 或 baselayer。
version 地图瓦片数据的版本,MBTiles 规范的版本是 1.1。
description 描述信息。
format 瓦片数据的格式:png、jpg或jpg_png,其中jpg_png是V5缓存支持的混合格式。
bounds 地图的切图范围,其单位与地图单位保持一致。iServer中bounds的格式为:左,下,右,上,例如:-180,-85,180,85。
axis_origin 切图原点的位置。
axis_positive_direction 坐标系中坐标轴的正方向的枚举类型(RightDown, RightUp, LeftDown, LeftUp),例如:x轴向右y轴向下RightDown。
crs_wkid 坐标系的EPSG Code(-1000为用户自定义坐标系,0为普通平面坐标系)。
crs_wkt 用wkt表示的地理坐标系信息。(wkt:由开放地理空间联盟(OGC)制定的一种文本标记语言,详见:http://docs.geotools.org/stable/javadocs/org/opengis/referencing/doc-files/WKT.html)
tile_height 瓦片高度,通常为256。
tile_width 瓦片宽度,通常为256。
resolutions 分辨率集合,各级瓦片对应的分辨率。
scales 各级分辨率对应的比例尺集合。
map_parameter 地图默认参数的 json 字符串,地图默认参数包含了地图的所有特征信息,如地图的名称 name、地图的比例尺 mapScale等。
compatible 是否兼容MBTiles规范,仅当wkid字段为3857并且分辨率集合中所有分辨率均属于MBTiles规范分辨率时为true,否则为false。

tiles 瓦片数据表包括所有的瓦片数据和用于定位瓦片数据的一些值。除MBTiles1.1规范的zoom_level, tile_colum, tile_row, tile_data四个字段外,增加了resolution字段,支持任意比例尺、任意分辨率。表结构如图2所示:

图2 瓦片数据表的表结构

瓦片数据的表内容举例如图3:

图3 瓦片数据表的表内容举例

注:当瓦片对应的地面分辨率与表 3 中的地面分辨率无法对应时,zoom_level值为-1。

根据resolution值或对应比例尺读写对应瓦片数据。

表3 MBTiles各显示级别参数列表

显示级别 地图宽高 (像素) 切片数量 地面分辨率(米 / 像素) 地图比例尺(96 dpi)
0 256 1 156543.033928 1:591658710.909131
1 512 4 78271.516964 1:295829355.454566
2 1024 16 39135.758482 1:147914677.727283
3 2048 64 19567.879241 1:73957338.863641
4 4096 256 9783.939621 1:36978669.431821
5 8192 1024 4891.969810 1:18489334.715910
6 16384 4096 2445.984905 1:9244667.357955

7

32768 16384 1222.992453 1:4622333.678978
8 65536 65536 611.496226 1:2311166.839489
9 131072 262144 305.748113 1:1155583.419744
10 262144 1048576 152.874057 1:577791.709872
11 524288 4194304 76.437028 1:288895.854936
12 1048576 16777216 38.218514 1:144447.927468
13 2097152 67108864 19.109257 1:72223.963734
14 4194304 268435456 9.554629 1:36111.981867
15 8388608 1073741824 4.777314 1:18055.990934
16 16777216 4294967296 2.388657 1:9027.995467
17 33554432 17179869184 1.194329 1:4513.997733
18 67108864 68719476736 0.597164 1:2256.998867
19 134217728 274877906944 0.298582 1:1128.499433
20 268435456 1099511627776 0.149291 1:564.249717
21 536870912 4398046511104 0.074646 1:282.124858
22 1073741824 17592186044416 0.037323 1:141.062429

tiles瓦片数据表中resolution存储时保留11位有效数字(四舍五入)。有效数字:从近似数的左边第一个不为0的数字起,到精确到的数为止,所有的数字叫这个近似数的有效数字(0.00123的有效数字是1,2,3,有效位数是3)。示例如表4所示:

表4 resolution近似值计算示例

resolution实际值 数据库存储的近似值
156543.03392804097 156543.03393
0.00029158412279196264 0.00029158412279
1.19432856695587 1.1943285670

Java中计算resolution的参考代码如下:

public static String getResolutionString(double resolution) {

int n = (int) Math.log10(resolution);

int precision = 11;

if (resolution < 1.0) {

n--;

}

int scale = precision - 1 - n;

return new BigDecimal(resolution).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();

}

时间: 2024-10-09 20:36:51

基于 MBTiles 规范扩展的缓存文件格式说明的相关文章

支持 MBTiles 规范的预缓存

SuperMap iServer 支持生成符合MBTiles规范的预缓存(MBTiles是由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范. 该规范由MapBox制定,详见http://mapbox.com/mbtiles-spec/).要生成符合MBTiles规范的预缓存,需满足以下条件: 所用数据的地图投影系统为:Web Mercator. 按照下表中的比例尺列表生成预缓存.这种比例尺定义的初始化显示级别0中包含了1张覆盖全球的256*256大小

基于JAX-WS规范的WebService实现

1.相关介绍 介绍Web Service需要首先了解SOA.SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过中间的契约(独立于硬件平台.操作系统和编程语言)连接起来,使得各种形式的功能单元更好的集成.WebService是SOA的一种很好的实现方式,WebService采用HTTP作为传输协议,SOAP(Simple Object Access Protocol)作为传输消息的格式. 本文重要介绍基于JAX-WS规范的We

ExtJS4.2学习(13)基于表格的扩展插件---rowEditing

鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/182.html -------------------------------------------------------------------------------------------- 前一章说了EditorGrid可编辑表格,但是有点不方便,如果数据多的话,一次性保存未免有点不太方便.下面我们来说一个扩展插件rowEditin

基于 HtmlHelper 自定义扩展Container

基于 HtmlHelper 自定义扩展Container Intro 基于 asp.net mvc 的权限控制系统的一部分,适用于对UI层数据呈现的控制,基于 HtmlHelper 的扩展组件 Code 基于 asp.net mvc 的权限控制系统示例代码:https://github.com/WeihanLi/AccessControlDemo 权限控制核心代码:https://github.com/WeihanLi/AccessControlDemo/tree/master/AccessCo

SpringMVC + ehcache( ehcache-spring-annotations)基于注解的服务器端数据缓存

背景 声明,如果你不关心java缓存解决方案的全貌,只是急着解决问题,请略过背景部分. 在互联网应用中,由于并发量比传统的企业级应用会高出很多,所以处理大并发的问题就显得尤为重要.在硬件资源一定的情况下,在软件层面上解决高并发问题会比较经济实惠一些.解决并发的根本在于提高系统的响应时间与单位时间的吞吐量.解决问题的思路可分两个维度,一是提高系统的单位时间内的运算效率(比如集群),二是减少系统不必要的开支(比如缓存).缓存又会分为客户端缓存与服务器端缓存,本文就javaEE项目的服务器端缓存方案展

Smarge——基于HTML5 localStorage的key-value缓存框架

缓存是任何一个Web程序都需要重视的内容.受到Redis的启发,我想到开发一个基于HTML5 localStorage的key-value缓存框架,做了一些尝试之后,便有了Smarge这样一个产物. 大家都知道,HTML5的localStorage没有超时的机制,也不能存储数组和对象等类型,更没有命令空间等思想. 这些问题,在Smarge中都得到了解决. 项目地址:https://git.oschina.net/jiusem/Smarge.git 说明:Smarge1.0.js是完整的源代码,以

【转载】基于AFNetWorking3.0的图片缓存分析

原文出处: Yasin的简书 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.CoreData…).我们常说的网络请求缓存包含内存缓存.硬盘缓存和URL缓存. 图片缓存思路 图片缓存流程图.png URL缓存 网络请求除了客户端需要做简单的配置外,最主要需要服务器支持,服务端也很简单,只需要在response里面设置Cache-Control字段就行了. 最常见的URL缓存实现方式:NSURLCache.NSURLCac

缓存篇~第七回 Redis实现基于方法签名的数据集缓存(可控更新,分布式数据缓存)

返回目录 本篇文章可以说是第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存(可控更新,WEB端数据缓存)的续篇,事实上,有EnterpriseLibrary.Caching也只是实现缓存持久化的一种方式,而Redis做为成熟的分布式存储中间件来说,实现这个数据集缓存功能显得更加得心应手,也更加满足大型网站的设计规则.(在多web服务器时(web端实现负载均衡,反向代理),EnterpriseLibrary.Cachin

linux下安装php扩展redis缓存

下载phpredis安装包 wget https://github.com/nicolasff/phpredis/tarball/master 在下载目录解压phpredis.tar.gz tar zxvf phpredis.tar.gz cd phpredis 使用php的phpize编译安装包(需要进入到解压出来的目录里面) /usr/local/php/bin/phpize 设置配置 ./configure --with-php-config=/usr/local/php/bin/php-