iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
SideProject30

製作適用於網頁的台灣登山地圖系列 第 10

[Day10] 產生向量圖磚

  • 分享至 

  • xImage
  •  

前幾天曾講過最主流的圖磚格式 MVT (Mapbox Vector Tile),今天就來談談如何從原始的地理資料產生它吧!以下來介紹我用過的幾個工具:

GDAL

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

tippecanoe 是由 Mapbox 本家開發,專門用於處理 GeoJSON 的命令行工具。

tippecanoe -o output.mbtiles input.json

這邊輸出的格式是 .mbtiles ,實際上就是一個 sqlite 資料庫檔案,它使用名為 tiles 的 table 來儲存所有圖磚(也可以用在點陣圖磚)。

當然,我們也可以使用參數 --output-to-directory 來產生包含圖磚的資料夾:

tippecanoe --output-to-directory output/ input.json

tilemaker

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 設定文件的撰寫正是製作向量圖磚的菁華!各種規則我們放到後面的篇章來講。


上一篇
[Day9] 登山相關標籤
下一篇
[Day11] 檢視向量圖磚
系列文
製作適用於網頁的台灣登山地圖25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言