前言Preface
使用OpenStreetMap有一個很大的優勢,就是基本上地圖的樣式都是可以自主來去做定義。 但是其實OpenStreetMap原本的自訂圖塊( Custom Tiles ) 並不是我們想像中的那麼的容易操作而且有其限制( 沒辦法將多圖層合併為單一圖層,資源消耗大 ),但是感謝廣大的開源社群相關的工具如雨後春筍一般的一個個冒出來( 如 TileCache, OpenLayer , TileStache ),讓 OpenStreetMap 的地圖多樣性有了革命性的改變,因為可以將多圖層合併在雲端完成,也就可以讓設計者與地圖製作者們可以專心繪製自己的圖層,剩下的合併交給那些工具就好。
TileStache介紹
Brief introduction of TileStache
這次要介紹的TileStache它的前身是TileCache,它們都是用來做圖層渲染(多圖層渲染成一個),這對於設計者與地圖製作者都非常的方便,當然對於一些效能不太好的客戶端也可以帶來一些不錯的效能提升,而TileStache的設計目的是為了讓整個工具更貼近設計者與地圖製作者,讓它們可以在越少的步驟中產生他們所需要的東西。
TileStache設定
Installation of TileStache
TileStache取得請到 官網 or My Github , 目前這個工具只能用在Linux或OSX上
TileStache 是以Python做為開發語言,所以我們所需要的套件如下:
- ModestMaps : 用來提供網頁版的地圖
- Python Imaging Library (PIL) : 用來合成圖檔
- Simplejson : 用來解析JSON
- Mapnik : 基本地圖樣式(底圖)
- Werkzeug : WSGI函式庫 for Python
TileStache兩種使用方式:
- 直接用Script資料夾內的python script
# 用來啟動伺服器(服務) tilestache-server.py # 用來快取圖檔(網路圖資) tilestache-seed.py # 用來產生自定義圖層 tilestache-render.py
- 將tilestache工具加入指令集
python setup.py install
從TileStache取得圖塊
Requesting Tiles from TileStache
- 從 HTTP 取得
- 取得單一圖塊 Single Tile
格式 : /{圖層名稱}/{縮放等級}/{x}/{y}.{副檔名(e.g. png, jpg}
範例 : http://example.org/osm/12/656/1582.png -
動態地圖(類似Google Map)
格式 : /{圖層名稱}/preview.html
範例 : http://example.org/osm/preview.html
- 取得單一圖塊 Single Tile
- 使用TileStache的API
- TileStache.getTile(layer, coord, extension[, ignore_cached=FALSE]): 直接取得圖塊 Get Tile Directly
- layer: 想要取得得圖層( Core.Layer )
- coord: 傳入所要取得的位置( ModestMaps.Core.Coordinate )
- extension: 副檔名("jpg", "png") (String)
- ignore_cached: (可有可無,預設為FALSE)是否忽略快取圖塊 (Boolean)
- TileStache.requestHandler(config, path_info[,query_string=None][, script_name='']): 透過HTTP Requesting取得圖塊 Get Tile by HTTP Requesting
- config: JSON設定檔的路徑(String) 或 TileStache.Config.Configuration物件(需要 cache, layers, dirpath 三個參數)
- path_info: 傳入Request URL, 格式同從HTTP取得之取得單一圖塊(範例: /osm/12/656/1582.png )
- query_string: (可有可無,預設為None)使用 JSONP 才會用到
- script_name: (可有可無,預設為'') 給CGI的腳本,用來判斷是否轉址成功
- TileStache.getTile(layer, coord, extension[, ignore_cached=FALSE]): 直接取得圖塊 Get Tile Directly
沒有留言:
張貼留言