前幾天曾講過最主流的圖磚格式 MVT (Mapbox Vector Tile),今天就來談談如何從原始的地理資料產生它吧!以下來介紹我用過的幾個工具:
GDAL (Geospatial Data Abstraction Library) 是一個開源的函式庫,用於處理和轉換地理資料。它使用 driver 的概念提供了一個統一的界面,可以讀取、寫入和處理各種格式,包括點、線、多邊形、點陣圖等。當然也包括 MVT。
在大多數 Linux Distro 的套件管理工具中,安裝 GDAL 還會附帶一些命令行工具。這邊我們使用專門處理向量資料轉換的 ogr2ogr
來作示範:
ogr2ogr -f MVT output/ input.gpkg -dsco MAXZOOM=10
output/
: 輸出後,用來儲存MVT 圖磚的資料夾input.gpkg
: 要轉換的地理資料-dsco
: dataset creation options 的簡稱,後面的 MAXZOOM
表示最多要生成的 zoom level使用 GDAL 的好處在於,它的 driver 幾乎支援任何一種主流和最新的地理資料格式,因此可以輕鬆把任一來源地理資料轉換為前端可以利用的格式。但在參數設定上較為繁鎖,很多細節都需要細細讀過文件後才能掌握。
tippecanoe 是由 Mapbox 本家開發,專門用於處理 GeoJSON 的命令行工具。
tippecanoe -o output.mbtiles input.json
這邊輸出的格式是 .mbtiles
,實際上就是一個 sqlite 資料庫檔案,它使用名為 tiles
的 table 來儲存所有圖磚(也可以用在點陣圖磚)。
當然,我們也可以使用參數 --output-to-directory
來產生包含圖磚的資料夾:
tippecanoe --output-to-directory output/ input.json
tilemaker 專門用於將 OSM 資料轉換為 MVT。
tilemaker --input input.osm.pbf --output output.mbtiles
之前提到過,OSM 物件用大量的 tag 來表示現實物,要將它們原封不動的全部照搬進向量圖磚實屬不必要。
另外如同 Day4 所述,一個 MVT 圖磚是由多個 Layer
組成,它旗下的 Feature
包含哪些欄位是需要由 Schema
來定義的。因此,tilemaker 使用兩種設定文件供使用者定義:
tilemaker \ --process process.lua --config config.json
--input input.osm.pbf --output output.mbtiles
--config
: 指定 JSON 文件,文件內容用來設定圖磚中該包含哪些 Layer
,以及產生圖磚的方法。可以設定的選項包括但不限於:
layers 有哪些 Layer 會被包含在內,要設定名稱及它們出現的最大/小縮放層級
minzoom 產生圖磚的最小縮放層級
maxzoom 產生圖磚的最大縮放層級
include_ids 是否要儲存向量圖磚中每個way/node的 OSM ID,
這關係到前端在利用圖磚時,是否能查詢到原始的 OSM 物件
compress 是否壓縮向量圖磚("none" 為預設選項,通常若有設定,會選擇"gzip")
combine_below 在某縮放層級以下,是否合併相同類型的相鄰線段
name, version, description 關於圖磚的更多描述。若輸出格式為 MBTiles 就會有用
--process
: 指定 lua
文件,文件內容用來撰寫的邏輯包括:要選取哪些 OSM 物件成為 Feature
、在 Feature
中應包含哪些欄位,以及物件應該寫入哪些 Layer
中。由於 MVT 格式是公開的,除了上述幾個工具外,大部分的 tile server 也能直接將資料庫的內容生成向量圖磚服務,例如老牌的 Geoserver。使用者也可以到 awesome-vector-tiles 這個 repo 來查閱有哪些工具可以用於產生 MVT。
既然登山的地理資料有相當多都存在 OSM 資料集中,那麼專精於處理 OSM 資料的 tilemaker 也會是往後系列文的主角。而 lua
設定文件的撰寫正是製作向量圖磚的菁華!各種規則我們放到後面的篇章來講。