この記事は2021 Advent Calendar ベクトルタイル13日目の記事です。
TL;DR
-
tilemaker
だと日本のOSMベクタータイルを作るのに2時間かからない - (まだExperimentですが)planetでも37時間で出来るというベンチマーク
tilemaker
C++で書かれた、osm.pbf->.MBTiles変換ツール。OpenMapTilesに準拠したスキーマでタイルを生成する。
OpenMapTiles
との違いは速度。OpenMapTiles
のタイル生成はかなり時間がかかる(日本だけで50時間、planetのベンチマークは見つからなかったが、想像したくないくらいの時間がかかりそう)。後述するが、tilemaker
では日本の領域のタイル生成に2時間かからない。
仕組みの違いとしては、OpenMapTiles
がOSMデータを全てPostgreSQLに投入してから色々処理しているのに対して、tilemaker
は全てオンメモリで処理を行う(GitHubのdescriptionによればwithout stackと表現されている)。
ゆえにtilemaker
では、実行マシンのメモリ容量はそれなりに大きいものが必要(planet対応のIssueで、最大メモリ使用量が131GBであったと記載されている ※planet-latest.osm.pbfのファイルサイズは90GB程度)。メモリが大きいとパフォーマンスがよいとかそういう話ではなくて、足りないと処理が落ちる。
また、tilemaker
には差分更新の仕組みはない(でもその必要がないくらい処理が早い)。
OSMタイルの日本分を作ってみる
実行条件
- japan-latest.osm.pbf(1.6GB)
- AWS EC2 r5.large(16GB RAM)
手順
git clone https://github.com/systemed/tilemaker.git
cd tilemaker
# osm.pbfをダウンロード(1.6GB)
wget https://download.geofabrik.de/asia/japan-latest.osm.pbf
# tilemaker実行
docker build . -t tilemaker
mkdir output
docker run -v $PWD:/output tilemaker --input japan-latest.osm.pbf --output output/japan.mbtiles
2時間足らずでMBTilesの生成が完了。
出来栄えを確認
© OpenMapTiles © OpenStreetMap contributors
(もうこれで良いんじゃないかな)
細かい検証はしていないが、OpenMapTilesで生成したタイルと同じ見た目になっている(フォントは置いといて)。
参考:https://tile.openstreetmap.jp/styles/osm-bright/#13.79/35.68197/139.7648
その他
- NaturalEarthのデータなどを配置しておくと取り込む機能もある模様(未検証)。
終わりに
tilemaker
はOSMベクタータイルのゲームチェンジャーだと思います。OSMタイル生成が圧倒的に手軽になります。運用を考えると、タイル生成のコストが大きいとデータの更新が悩みのタネですが、tilemaker
が実用レベルに到達すれば、この問題が解消されます。誰でもOSMベクタータイルを作成・配信・運用できるようになると思います。