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