MBTiles 入門與簡單應用##
在開源GIS盛行的時代,如果還拘泥於舊式地圖也就太單調了。
而如今MBTiles是由MAPBOX公司所主持的一個開源標准,勢必要將瓦片地圖標准化,高效化。實質上,是由一個SQLite包裝起256*256大小的瓦片地圖圖片。透過數據庫索引的方式提高瓦片索引的效率。據說,比文件夾模式的瓦片分布要高的多。
MBTiles的標准在Github或者OpenStreetWiki或者Mapbox主頁上可以找到,具體格式不再這里贅述。
由一般數據轉換成瓦片地圖的操作,有兩個方式主要包括:
-
數據源是已有柵格地圖數據,由於地圖已經渲染過,圖例不會放大。運用工具建議是Global Mapper,可以完成與矢量配准,數據格式輸出成MBTiles等。
-
數據源是未被渲染的矢量地圖數據,此時數據並未渲染過,圖標圖例可以進行不同級別的處理。建議使用mapnik,詳情具體百度谷歌。
得到MBTiles之后,它其實只是一個SQLite數據庫文件,有點在於小,方便遷移,可以存在於移動端。還需要一步就是發布服務,讓外網訪問。這時可以使用PHP或者Node.js等快速開發的方法。這里提及兩個開源項目:PHP-MBTiles-Server和node-MBTiles。
這里貼出PHP-MBTiles-Server的源碼,讓大家爽一下,同樣的方法可以運用在別的后端語言上。
// Open the database
$conn = new PDO("sqlite:$db");
// Query the tiles view and echo out the returned image
$sql = "SELECT * FROM tiles WHERE zoom_level = $zoom AND tile_column = $column AND tile_row = $row";
$q = $conn->prepare($sql);
$q->execute();
$q->bindColumn(1, $zoom_level);
$q->bindColumn(2, $tile_column);
$q->bindColumn(3, $tile_row);
$q->bindColumn(4, $tile_data, PDO::PARAM_LOB);
while($q->fetch())
{
header("Content-Type: image/png");
echo $tile_data;
}