一覧に戻る

tilemakerを使って爆速でOSMベクタータイルを作る

#OpenStreetMap#foss4g#ベクタータイル

この記事は2021 Advent Calendar ベクトルタイル13日目の記事です。

TL;DR

  • tilemakerだと日本のOSMベクタータイルを作るのに2時間かからない
  • (まだExperimentですが)planetでも37時間で出来るというベンチマーク

tilemaker

https://github.com/systemed/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ベクタータイルを作成・配信・運用できるようになると思います。