MBTiles é uma especificação para armazenamento de dados de mapas em mosaico (tiles) em um banco de dados SQLite, permitindo uso e distribuição imediatos.
Arquivos MBTiles são chamados de tilesets e devem aderir à seguinte especificação para garantir a compatibilidade.
Especificação do Banco de Dados
Tilesets utilizam bancos de dados SQLite versão 3.0.0 ou superior. Apenas funcionalidades centrais do SQLite são permitidas; extensões não são necessárias.
Bancos de dados MBTiles podem ser identificados rapidamente como tal por um número mágico (magic number) opcionalmente atribuído pela especificação.
Metadados (Metadata)
O banco de dados deve conter uma tabela ou view chamada metadata.
Esta tabela deve possuir duas colunas: name e value. Um exemplo de criação típico:
CREATE TABLE metadata (name text, value text);
A tabela metadata funciona como um armazenamento de chave/valor para configurações.
As seguintes cinco chaves são obrigatórias:
name: O nome do tileset em inglês simples.type: O tipo de layer, podendo seroverlay(sobreposição) oubaselayer(camada base).version: A versão do tileset, um número puro.description: Uma descrição textual do layer.format: O formato do arquivo de imagem dos dados dos tiles, sendopngoujpg.
As seguintes chaves são recomendadas para melhor desempenho:
bounds: O limite máximo da área geográfica coberta pelo mapa. Os limites devem definir a área para todos os níveis de zoom. Os valores são em graus de longitude/latitude no formato WGS:84, no estilo OpenLayers: esquerda,baixo,dirieta,cima. Exemplo global:-180.0,-85,180,85.attribution: Uma string de atribuição em inglês simples (e HTML) que explica a origem dos dados e/ou estilo do mapa.
Chaves adicionais são comumente suportadas por implementações de tilesets.
Tiles (Mosaicos)
O banco de dados deve conter uma tabela chamada tiles.
Esta tabela deve possuir quatro colunas: zoom_level, tile_column, tile_row e tile_data. Um exemplo de criação típico:
CREATE TABLE tiles (zoom_level integer, tile_column integer, tile_row integer, tile_data blob);
A tabela tiles armazena os mosaicos e os valores usados para localizá-los. As colunas zoom_level, tile_column e tile_row seguem a especificação do Tile Map Service, limitadas à forma descrita.
Assume-se o sistema de coordenadas Spherical Mercator (global-mercator).
A coluna tile_data (blob) contém os dados binários brutos da imagem.
Os formatos de imagem permitidos são:
pngjpg
Grids (Grades)
Para detalhes de implementação sobre grades e metadados de interação, consulte a especificação UTFGrid. A especificação MBTiles apenas aborda o armazenamento.
O banco de dados pode opcionalmente conter as tabelas grids e grid_data.
Tabela grids
A tabela grids deve ter as colunas zoom_level, tile_column, tile_row e grid. Um exemplo de criação típico:
CREATE TABLE grids (zoom_level integer, tile_column integer, tile_row integer, grid blob);
Tabela grid_data
A tabela grid_data deve ter as colunas zoom_level, tile_column, tile_row, key_name e key_json. Um exemplo de criação típico:
CREATE TABLE grid_data (zoom_level integer, tile_column integer, tile_row integer, key_name text, key_json text);
A tabela grids contém dados UTFGrid, comprimidos com gzip. A tabela grid_data armazena o mapeamento de chave de grade para valor, onde o valor é codificado como um objeto JSON.