前幾天都從需求出發,使用 tilemaker 製作圖磚並立即渲染到 Maplibre 的 Web Map 之中。
從源頭的 OSM 資料集到最後展示的地圖,大致會依照以下的流程:
(圖片來源:https://gdunlop.github.io/Vector-tiles-remixed/ )
tilemaker 發展至今日,圖中設定檔(config)的部分其實有相當多的部分可以討論。今天我們就根據相關文件,來講講一些需要注意的事,以及有什麼工具可以妥善處理 OSM 資料。
由於向量圖磚使用的 pbf 格式編碼非常高效,因此通常情況下,我們只需要產生縮放等級14(z14) 的圖磚即可。在地圖放到更大時,前端的渲染會持續使用 z14 的資料來產生畫面。
因此,我們在設定檔中將 Layer 的最大縮放等級設為14時,其實也就夠前端的渲染器來去繪製所有細節了。
在上面的流程圖中你也看到了,tilemaker 雖然主要使用 OpenStreetMap 的 pbf 格式作為輸入,但也可以使用 Shapefile 作為 Layer 的資料來源(僅限座標系為 WGS84)。因為我們每次產製圖磚時,都希望使用最新的 OSM extract,因此我們可以將很少變化的物件直接放入 Shapfile 中,例如行政區界、海岸線,以及我們前幾天處理的山頂資料。
若要將 Shapefile 使用在某個 Layer 中,可以在 config.json
文件中這樣撰寫:
"urban_areas": {
"minzoom": 11, "maxzoom": 14,
"source": "data/urban_areas.shp",
"simplify_below": 13, "simplify_level": 0.0003
},
"bridges": {
"minzoom": 13, "maxzoom": 14,
"source": "data/Bridges_WGS84.shp",
"source_columns": ["SAP_DESCRI"]
}
source_columns
可以指定要匯入哪些資料欄位。若要匯入 Shapfile 中資料的所有欄位,可以使用 "source_columns": true
在 Lua 文件中,有許多實用的 function 可以篩選資料或新增 Layer,這邊提出幾個來講:
將線段或多邊形的質心,寫入指定的 Layer,這可以幫助前端在渲染時可以直接取用,形成 POI (Point of Interest)。
舉例來說,昨天的水域名稱即是用這種方法,寫入名為 water_name
的 Layer。
回傳物件的 OSM ID,這也讓使用者有機會在渲染後的地圖中,有機會利用 ID 到其它網站查詢,直接取得原始的 OSM 物件資訊。
預設為 0,用於對 Layer 內的 Feature 進行排序。如果渲染引擎本身不支援依照屬性排序,則使用此功能可確保正確的渲染順序。因此可以確保渲染後,哪些物件一定保持在上方不會被覆蓋。
回傳中心點的座標(緯度與經度),目前我想不出來有什麼可以使用的地方...