地圖制作者面對(duì)一個(gè)數(shù)以百萬(wàn)計(jì)的地圖瓦片殘酷的現(xiàn)實(shí):大多數(shù)文件系統(tǒng)和傳輸協(xié)議對(duì)處理數(shù)以百萬(wàn)計(jì)的圖像不是很有效,在磁盤為FAT32格式中,一個(gè)文件夾中最多含有65536個(gè)文件,HFS最多能列出32,767個(gè)文件,EXT3超過20000個(gè)文件時(shí)會(huì)變的很慢。不論是你通過USB還是網(wǎng)絡(luò)來復(fù)制數(shù)以百萬(wàn)計(jì)的瓦片數(shù)據(jù)是低效并且緩慢的。MBTiles利用SQLite數(shù)據(jù)庫(kù)來存儲(chǔ),并提供一種規(guī)范,使得數(shù)以百萬(wàn)的瓦片數(shù)據(jù)存儲(chǔ)在一個(gè)文件中,而且SQLite數(shù)據(jù)庫(kù)支持多種平臺(tái),所以使用MBTiles在移動(dòng)設(shè)備上瀏覽瓦片數(shù)據(jù)是比較理想的方式。
簡(jiǎn)單介紹下SQLITE
如果你之前使用過SQL數(shù)據(jù)庫(kù),比如MySQL或PostgreSQL),那么使用SQLite數(shù)據(jù)庫(kù)會(huì)覺得很熟悉,您可以運(yùn)行熟悉的SQL SELECT、INSERT、UPDATE語(yǔ)句,并創(chuàng)建表、索引、視圖。SQLite和其他數(shù)據(jù)庫(kù)之間的區(qū)別是:每個(gè)SQLite數(shù)據(jù)庫(kù)只包含在一個(gè)文件,沒有外部權(quán)限系統(tǒng),數(shù)據(jù)庫(kù)后臺(tái)進(jìn)程,或配置。每個(gè).sqlite文件是一個(gè)獨(dú)立的數(shù)據(jù)庫(kù),你可以從電腦復(fù)制一個(gè).sqlite文件到移動(dòng)設(shè)備中,它的行、表和索引都可完全使用。
SQLite是很小的并且是無(wú)處不在的:iTunes使用它來存儲(chǔ)元數(shù)據(jù),firfox使用它來存儲(chǔ)緩存信息,還有一些其他產(chǎn)品(雖然過時(shí)了,但仍記憶猶新)
總之,SQLite非常適合作為一個(gè)便攜式,單個(gè)文件解決方案和用于存儲(chǔ)和網(wǎng)絡(luò)地圖服務(wù)。
在SQL中使用瓦片坐標(biāo)
在WEB地圖介紹中我們看到,瓦片是參照了他們的z / x / y 形式坐標(biāo),在磁盤存儲(chǔ)上,他們通常存儲(chǔ)在以z、x為名字上的目錄中,這樣就有一個(gè)瓦片文件路徑是0/0/0.png,MBTiles提供了這樣一個(gè)功能:瓦片表
這張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊边@張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊边@張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊边@張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊边@張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊边@張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊边@張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊?/span>這張表很容易查詢并回答一個(gè)特定的瓦片或問題,例如“在這張地圖中級(jí)別為8時(shí)有多少?gòu)埻咂俊?/span>
使用視圖引用冗余的圖像
地圖覆蓋大面積的純藍(lán)色像海洋或空的土地,造成成千上萬(wàn)的重復(fù)、冗余的瓦片數(shù)據(jù),例如,4/2/8的瓦片在太平洋中間,可能看起來就是一張藍(lán)色圖片
雖然它可能是一些處于第3級(jí),但在16級(jí)可能存在數(shù)以百萬(wàn)計(jì)的藍(lán)色圖片,他們都完全一樣。
MBTiles通過視圖使用這些冗余瓦片數(shù)據(jù)可以減少占用的空間,而不是一個(gè)單一的、文字表,MBTiles實(shí)現(xiàn)者經(jīng)常把瓦片表分成兩種:一個(gè)用來存儲(chǔ)原始圖像和一個(gè)存儲(chǔ)瓷磚坐標(biāo)對(duì)應(yīng)那些圖片:
瓦片的表是這兩個(gè)表的視圖,允許成千上萬(wàn)的瓷磚坐標(biāo)參考相同的圖像大字段:
使用這種技術(shù),MBTiles可以比普通文件系統(tǒng)存儲(chǔ)更有效率 —有時(shí)提高60%或更多
MBTiles 在使用上
MBTiles是一種存儲(chǔ)格式,他常被TileMill來導(dǎo)出或上傳自定義地圖。你可以通過MapBox ios SDK 來使用移動(dòng)設(shè)備上MBTiles離線文件。