はじめに
以前にQiitaで読んだ、ベクタータイルのGitHubでのホスティングに関する記事がきっかけでした(URLは見失いました)。内容は、タイル化されたベクターデータはひとつのファイルのサイズが非常に小さく、GitHubによるホスティングに適している、との事。確かになぁと思いました。これはつまり、誰しもがベクタータイルを配信出来るという事です。それぞれが持っている大小問わないデータを、タイル化さえ出来ればリポジトリに置いておくだけで、誰しもが活用出来るわけです。実現すればとても素晴らしいなと思いました。
一方ベクタータイルの作成はハードルが高いとも感じており(難しいというよりは環境構築などの手間が障壁になる)、ベクタータイルの作成・配信が簡単に出来たらその状況が実現するかもなぁ、というぼんやりした考えがありました。
そんななか、以前紹介しましたがVectorTilesReaderというプラグインを知りました(以下VTReader)。これは、既にタイル化されホスティングされているベクターデータをQGISで読み込むプラグインです。じゃあ逆に、QGISのレイヤーをベクタータイルとして手軽にエクスポート出来れば便利では、と考え作成したのが「MBStyleGenerator」です。
MBStyleGenerator
https://github.com/Kanahiro/MBStyleGenerator
https://plugins.qgis.org/plugins/MBStyleGenerator-master/
Sample

このスクリーンショットは、QGIS上でVTReaderで読み込んだ地理院ベクトルタイルのいくつかのレイヤーをスタイリングしたものと、そのレイヤーを用いてMBStyleGeneratorで作成したstyle.jsonをMapbox GL JSで読み込んでいるものを並べた画像です(OSMのラスタータイルを背景にOpacity=0.5で表示しています)。QGISとMapboxで、地理院ベクトルタイルが同じようにスタイリングされている事がわかります。
機能
- style.jsonの生成
- バイナリベクタータイル(.pbfファイル群のこと)とstyle.jsonの同時生成
つまり、style.jsonのみを生成するか、バイナリデータも併せて生成するか、どちらかです。いずれのケースでも基本的に、style.jsonをMapboxで読み込むだけで表示出来るようになっています。
現状「Experimental」です。以下の既知の問題があります。
- Textの表示には対応していない
-
QGISのサイズ単位はMMにのみ対応→PointとPixelにも対応しました - ベクタータイル生成時、maxzoomとminzoomの指定が出来ない(常にmax22, min0)
また現状、QGISのスタイル表現をMapboxに完璧に翻訳出来ている訳ではありません。
仕様
- プロジェクト内で「表示されているすべてのレイヤー」をstyle.json(とバイナリデータ)に書き込みます
- プロジェクト内の各「レイヤー名」が、style.json内layersにおける"source-layer"になります
- プロジェクト内の各「レイヤーID」が、style.json内layersにおける”id”になります
- 幅などのサイズは、ポイントに整数値切り上げで変換されます
- ラスターレイヤーは、xyzタイルのみ対応しています(.tifなどには未対応)
- ラスターレイヤーのスタイリングは透過度(Opacity)のみ対応しています
- MVT Source URLはOptionalですが、空欄の場合はダミーテキストが挿入されるので使用前に手動で入力する必要があります
- バイナリベクタータイルは、表示されているすべてのベクターレイヤーから生成されます
- バイナリベクタータイルは、ベクターレイヤーをすべてEPSG:3857に変換したうえで、生成されます
- バイナリベクタータイルは、tippecanoeとmbutilにより生成され、データの量に応じて処理時間がかかります
- バイナリベクタータイルは、style.jsonと同じディレクトリに生成される「pbf」というディレクトリ内に書き出されます
使い方
- メニューから起動

- ダイアログに入力・実行
Runでファイルが出力されます。Make MVT Sourceにチェックを入れると、バイナリベクタータイルを生成します。

- 指定ディレクトリにstyle.json(とバイナリベクタータイル)が出力される

終わりに
思ったよりもちゃんと形になりました。もう少しブラッシュアップが必要ですが、まず公開してフィードバックを受けつつ修正した方がよいなと考えリリースしました。ちょうどQGISでベクタータイルをサポートするクラウドファンディングが開始されたところだったので、タイミングの良し悪しは置いといて、ベクタータイルが普及期にある事は間違いありません。今後の動向にも目が離せません。