MBTiles 1.3
本文件中的关键词“必须”、“不得”、“要求”、“应”、“不得”、“应”、“不应”、“建议”、“可”和“可选”应按照
Abstract
MBTiles是一种规范,用于在SQLite数据库中存储平铺地图数据,以便立即使用和传输。MBTiles文件(称为TILESET)必须实现以下规范,以确保与设备兼容.
Compatibility
本节内容丰富,不向实现中添加需求。
由于视图可用于生成MBTiles模式,因此两个实现可能存储具有不同内部详细信息的Tile,这意味着一个实现可能无法添加到现有文件中。
作为一种容器格式,MBTiles可以存储任何平铺数据,因此可以存储实现无法处理的数据。
依赖规范中未定义的元数据键可能会导致兼容性问题。
Database Specifications
TileSet应为3.0.0或更高版本的有效SQLite数据库。仅允许核心SQLite功能;瓦片不需要延长。
MBTiles数据库可以使用官方指定的幻数,以便轻松识别为MBTiles。
Database
注意:概述的模式将作为接口遵循。可以使用生成兼容结果的SQLite视图。为方便起见,本规范将表和虚拟表(视图)称为表。
Charset
MBTILESET中表格文本列中的所有文本必须编码为UTF-8。
Schema
The database MUST contain a table or view named metadata
.
数据库必须包含名为metadata的表或视图。
此表或视图必须恰好生成两列类型为text的列,命名为name和value。元数据表的create语句:
CREATE TABLE metadata (name text, value text);
Content
元数据表用作设置的键/值存储。它必须包含以下两行:
-
name
(string): tileset的可读名称。 -
format
(string): 平铺数据的文件格式:pbf
,jpg
,png
,webp
,或其他格式的IETF(
pbf作为一种格式,是指Mapbox矢量平铺格式中的gzip压缩矢量平铺数据。
元数据表应包含以下四行:
-
bounds
(由逗号分隔的数字组成的字符串):渲染贴图区域的最大范围。边界必须定义所有缩放级别所覆盖的区域。边界表示为WGS 84纬度和经度值,采用OpenLayers边界格式(左、下、右、上)。例如,整个地球的边界减去极点,将为:-180.0,-85,180,85
。 -
center
(由逗号分隔的数字组成的字符串): 地图默认视图的经度、纬度和缩放级别。例如:-122.1906,37.7599,11
-
minzoom
(number):tileset为其提供数据的最小缩放级别 -
maxzoom
(number): tileset为其提供数据的最大缩放级别
元数据表可能包含以下四行:
-
attribution
(HTML string): 属性字符串,用于解释地图的数据源或样式。 -
description
(string): tileset内容的描述。 -
type
(string):overlay
orbaselayer
-
version
(number): tileset的版本。这是指瓦片集本身的修订版,而不是MBTiles规范的修订版。
如果格式为pbf,元数据表必须包含以下行:
json
(stringified JSON object): 列出矢量平铺中显示的图层以及这些图层中显示的要素属性的名称和类型。见
元数据表可能包含用于实现基于
Tiles
Schema
数据库必须包含名为tiles的表。
注意:概述的模式将作为接口遵循。可以使用生成兼容结果的SQLite视图。为方便起见,本规范将表和虚拟表(视图)称为表。
该表必须包含三列integer类型的列, 命名为zoom_level
, tile_column
, tile_row
, 以及一列blob类型的列, 命名为tile_data
.tiles表的create语句::
CREATE TABLE tiles (zoom_level integer, tile_column integer, tile_row integer, tile_data blob);
数据库可能包含有效访问此表的索引:
CREATE UNIQUE INDEX tile_index on tiles (zoom_level, tile_column, tile_row);
Content
tiles表包含tiles以及用于定位它们的值。zoom_level,
tile_column, 和
tile_row列必须按照平铺地图服务规范对平铺的位置进行编码,但必须使用全局墨卡托(也称为球形墨卡托)配置文件。
请注意,在TMS平铺方案中,Y轴与URL中常用的“XYZ”坐标系相反,以请求单个平铺,因此通常称为11/327/791的平铺被插入为缩放级别11、平铺列327和平铺行1256,因为1256是2^11-1-791。
tile_data列必须包含关联tile的原始二进制图像或矢量tile数据,作为blob。
有关网格和交互元数据本身的实现细节,请参见
Schema
这个数据库可能有名为grids和grid_data的表。
grids表必须包含integer类型的三列,命名为zoom_level,
tile_column, 和tile_row,以及blob类型的一列,命名为grid。grids表的典型create语句:
CREATE TABLE grids (zoom_level integer, tile_column integer, tile_row integer, grid blob);
grid数据表必须包含三列integer类型的列,命名为zoom_level、tile_column和tile_row,以及两列text类型的列,命名为key_name和key_json。grid数据表的典型create语句:
CREATE TABLE grid_data (zoom_level integer, tile_column integer, tile_row integer, key_name text, key_json text);
Content
“grids”表(如果存在)必须包含以“gzip”格式压缩的UTFGrid数据。
“grid_data”表(如果存在)必须包含网格键到值的映射,并对值进行编码
作为JSON对象。
Vector tileset metadata
如上所述,Mapbox矢量平铺瓷砖集必须在“metadata”表中包含一个“json”行
总结平铺中可用的图层以及平铺中可用的属性
这些图层中的功能。
“json”行(如果存在)必须包含json对象的UTF-8字符串表示形式。
Vector_layers
“JSON”行中的JSON对象必须包含“vector_layers”键,其值是JSON对象的数组。
这些JSON对象中的每一个都描述了一层矢量平铺数据,并且必须包含以下键值对:
-
id
(string): 图层 ID,在 -
fields
(object):一个JSON对象,其键和值是该层中可用属性的名称和类型。每种类型都必须是字符串“Number”、“Boolean”或“string”。类型因功能而异的属性应列为“字符串”。
每个图层对象还可能包含以下键值对:
-
description
(string): 图层内容的可读描述.
每个图层对象还可能包含以下键值对:
-
minzoom
(number): 此层显示在其平铺中的最低缩放级别。 -
maxzoom
(number): 此层显示在其平铺中的最高缩放级别。
“minzoom”必须大于或等于tileset的“minzoom”,
并且“maxzoom”必须小于或等于tileset的“maxzoom”。
这些键用于描述不同向量层集合的情况以相同瓦片的不同缩放级别显示,例如,在“次要道路”图层仅在高缩放级别出现。
Tilestats
JSON
行中的JSON对象还可能包含tilestats
键,其值是“geostats”中的对象
Example
包含美国各州和主要道路的矢量平铺集
-
name
:TIGER 2016
-
format
:pbf
-
bounds
:-179.231086,-14.601813,179.859681,71.441059
-
center
:-84.375000,36.466030,5
-
minzoom
:0
-
maxzoom
:5
-
attribution
:United States Census
-
description
:US Census counties and primary roads
-
type
:overlay
-
version
:2
-
json
:
{
"vector_layers": [
{
"id": "tl_2016_us_county",
"description": "Census counties",
"minzoom": 0,
"maxzoom": 5,
"fields": {
"ALAND": "Number",
"AWATER": "Number",
"GEOID": "String",
"MTFCC": "String",
"NAME": "String"
}
},
{
"id": "tl_2016_us_primaryroads",
"description": "Census primary roads",
"minzoom": 0,
"maxzoom": 5,
"fields": {
"FULLNAME": "String",
"LINEARID": "String",
"MTFCC": "String",
"RTTYP": "String"
}
}
],
"tilestats": {
"layerCount": 2,
"layers": [
{
"layer": "tl_2016_us_county",
"count": 3233,
"geometry": "Polygon",
"attributeCount": 5,
"attributes": [
{
"attribute": "ALAND",
"count": 6,
"type": "number",
"values": [
1000508839,
1001065264,
1001787870,
1002071716,
1002509543,
1003451714
],
"min": 82093,
"max": 376825063576
},
{
"attribute": "AWATER",
"count": 6,
"type": "number",
"values": [
0,
100091246,
10017651,
100334057,
10040117,
1004128585
],
"min": 0,
"max": 25190628850
},
{
"attribute": "GEOID",
"count": 6,
"type": "string",
"values": [
"01001",
"01003",
"01005",
"01007",
"01009",
"01011"
]
},
{
"attribute": "MTFCC",
"count": 1,
"type": "string",
"values": [
"G4020"
]
},
{
"attribute": "NAME",
"count": 6,
"type": "string",
"values": [
"Abbeville",
"Acadia",
"Accomack",
"Ada",
"Adair",
"Adams"
]
}
]
},
{
"layer": "tl_2016_us_primaryroads",
"count": 12509,
"geometry": "LineString",
"attributeCount": 4,
"attributes": [
{
"attribute": "FULLNAME",
"count": 6,
"type": "string",
"values": [
"1- 80",
"10",
"10-Hov Fwy",
"12th St",
"14 Th St",
"17th St NE"
]
},
{
"attribute": "LINEARID",
"count": 6,
"type": "string",
"values": [
"1101000363000",
"1101000363004",
"1101019172643",
"1101019172644",
"1101019172674",
"1101019172675"
]
},
{
"attribute": "MTFCC",
"count": 1,
"type": "string",
"values": [
"S1100"
]
},
{
"attribute": "RTTYP",
"count": 6,
"type": "string",
"values": [
"C",
"I",
"M",
"O",
"S",
"U"
]
}
]
}
]
}
}
Future directions
在本规范的未来版本中,元数据表将包含一个压缩行,以指示已应用于磁贴数据的压缩类型(如果有)。
在本规范的未来版本中,元数据表的bounds、minzoom和maxzoom行是必需的。
本规范的未来版本将把元数据表的json行的描述委托给外部规范。