高効率生産のための、パイプライン手法とは
国連ベクトルタイルツールキットのコミュニティ形成施策として、planet.osm.pbf からなるべくダイレクトにベクトルタイルを生産する手法を研究しています。
現在、次のステップで生産する方法の迅速化を研究しているところです。
- osmium extract で z=6 のタイル範囲の塊(モジュール)にデータを分割する。
- osmium export で GeoJSON Text Sequences に変換。
- その GeoJSON Text Sequence を Tippecanoe に入れる直前に、地物単位でデータを加工。
- Tippecanoe でモジュール単位の mbtiles を生産。
なお、生産したモジュール単位の mbtiles をホストするサーバの最新型は、onyx です。
一時ファイルの読み書きのための領域と処理時間を節約し、パイプライン化の一般的な速度利益を享受するため、上記ステップの 2., 3., 4. をプロセス間のパイプで繋ぐコードである produce-320を試作しました。
コミュニティ形成施策のために用意しているサーバのストレージ容量の制限のため、試作範囲はいわゆる Null Island を中心とする 320 モジュールに限定しています。
計測結果
この試作において、計測した生産速度を共有します。
- 以下の速度計測において、対象とするモジュールは 6-32-24です。シチリア島全島と、いわゆるイタリアのつま先部分が含まれています。
- 使用した計算機は MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports), CPU 2.3GHz Intel Core i5, メモリ 8GB) です。
- osmium extract の開始から終了まで、7分4秒かかりました。
- osmium extract の終了から Tippecanoe の終了まで、7分38秒かかりました。
- 全体で、14分42秒かかったことになります。
- なお、全体のプロセスは2並列で処理するようにキューに入れているので、データセット全体を見たときに、モジュール生産所要時間の目安はこの半分程度ということになることになります。
今後、osmium extract もパイプラインに繋げることで、さらに速度が向上しないか試してみたいと思います。改造版は produce-320neo という名前の別レポジトリで進めるつもりです。
この手法の特徴として考えていること
国連ベクトルタイルツールキットが採用しているこの手法の特徴は、ソースデータをなるべくトラップすることなく、シリアルかつダイレクトに(つまり、ストリーム的に)ベクトルタイルに変換していくということですね。これまでの作業も含め、国連ベクトルタイルツールキットが目指す3つの価値というのは、次の3つではないかと考え始めています。
性能
ベクトルタイルのサイズを調整しやすい機構 (modify.js) を持ち、既存の vt-optimizer のような計測手段と組み合わせることで、画像タイルよりも高速性を確保することを支援する。
相互運用性
様々なウェブ地図ライブラリから利用できるよう、データのシンプルさを確保し、相互運用性を確保できるようなサーバ側の支援を行う。
透過性
原型データのデータ構造をなるべく崩さない形でベクトルタイルに持っていく方法を提供することで、ベクトルタイル提供の安定性を確保し、原型データの生産・管理の仕事との一体性を確保する。