これはベクトルタイル Advent Calendar 2017 9日目の記事です。
hfuさんの記事でベクトルタイルの理解が深まってきたので、このへんで実際にQGISを使ってベクトルタイルを見てみましょう。
ベクトルタイルはWebGIS界隈で整備が進んできましたが、ここになってデスクトップGISへの逆輸入も始まっているようです。
ArcGIS Pro:
https://pro.arcgis.com/ja/pro-app/help/data/services/use-vector-tiled-layers.htm
QGIS:
https://github.com/geometalab/Vector-Tiles-Reader-QGIS-Plugin
ということで、今回はバイナリベクトルタイルをQGISで表示してみます。
QGISでバイナリベクトルタイルを表示してみる
QGISでバイナリベクトルタイルを表示するには、Vector Tiles Reader Pluginを使用します。QGIS 2.18以上で動作します。
2. メニューから ベクタ > Vector Tiles Layer > Add Vector Tiles Layer..と選びます。
デフォルトで、以下のOベクトルタイルの配信データがセットされています。
- Mapzen.com
- OpenMapTiles.com
- OpenMapTiles.com(with custom key)
これはOSMのデータをベクトルタイルに変換したもので、Mapzenバージョン、OpenMapTilesバージョンが選択できます。
何が違うのかはhfuさんのこちらの記事が参考になります。
https://qiita.com/hfu/items/a761c5875d73c164bcd4
https://qiita.com/hfu/items/afbafacb70197711ee29
3. 「Connect」を押してレイヤ情報を取得します。
レイヤの一覧が表示され、表示オプションを設定できます。
表示オプションは、「Base Map defaults」、「Analysys Defaults」、「Inspection Defaults」、「Manual」がセットされています。
- Base Map defaults:表示用。JSONのスタイルを適用。32タイルを読み込み
- Analysys Defaults:分析用。タイルの境界バッファ部分を切り取り、すべてのタイルをマージ。16タイル読み込み
- Inspection Defaults:確認用。1タイルのみ読み込み。
- Manual:自分でオプションを設定
4. 「Add」ボタンを押して、表示します。
たったこれだけで、全国編集可能なOSMのデータが取得できてしまいます。ベクトルタイル便利ですねー
※ちょっと前に試した時は、デフォルトのスタイルをいい感じで付けてくれてたけど、今日、プラグインをアップデートしたら、いまいちなスタイルになってました。まあ、そのへんは開発途中ということで。
こうなってくるとベクトルタイルも自分で作って、QGISで表示させたくなります。
ということで、、、
shpファイルからバイナリベクトルタイルを作る
自分のshpファイルからバイナリベクトルファイルを作ってみましょう。
1. shpファイルを用意します。
今回は、植生図のデータを利用しました。
http://gis.biodic.go.jp/webgis/sc-023.html
2. shpファイルをgeojsonに変換します。
QGISでgeojson形式で書き出せばOKです。
3. tippecanoeを用意します。
Windowsでtippecanoeを利用するために、Bash on Ubuntu on Windowsを入れておきます。インストール方法はググってください。
tiooecanoeのソースコードをダウンロードします。
https://github.com/mapbox/tippecanoe
bashコンソールでgit clone すればダウンロードできます。
git clone https://github.com/mapbox/tippecanoe.git
tippecanoeをコンパイルします。コンパイルに必要なソフトをapt-getでインストールしてからmakeします。
cd tippecanoe sudo apt-get install make g++ sqlite3 libsqlite3-dev zlib1g-dev make sudo make install
6. tippecanoeでgeojsonをpbf(mvt)に変換します。
以下のコマンドでgeojsonをpbfファイルに変換します。ファイルはvegフォルダに1/1/1.pbfのように作られます。変換オプションで、ズームレベルや簡素化なども設定できます。
tippecanoe -e veg veg.geojson
以下のコマンドだと、mbtiles形式になります。
tippecanoe -o veg.mbtiles veg.geojson
tippecanoeで変換すると拡張子はpbfとなるようですが、vector-tile-specを読むとmvtとすべきみたいですね。
https://github.com/madefor/vector-tile-spec/blob/master/2.1/README.md
バイナリベクトルタイルをネットで配信してQGISで表示する
バイナリベクトルタイルができたのでQGISで読み込めるように配信してみましょう。
1. レイヤ情報のtile.jsonを作成します。
Vector Tiles Reader Pluginにレイヤの情報を教えるために、tilejson形式のtile.jsonを作成します。
https://github.com/mapbox/tilejson-spec/tree/master/2.2.0
tilejsonのspecはリンクの通りですが、プラグインでは最低限の情報があれば大丈夫そうです。
tilesのURLは、配信場所のURLに合わせます。boundsやcenterはtippecanoeで変換されたvegフォルダの中のmetadata.jsonに書かれています。
こんな感じです。
{ "tilejson": "2.2.0", "tiles": ["https://map.ecoris.info/mvt-tiles/veg/{z}/{x}/{y}.pbf"], "name": "veg mvt", "attribution": "Biodiversity Center of Japan", "maxzoom": 14, "minzoom": 0, "bounds": [140.746596,37.836344,140.871589,37.919672], "center": [140.767822,37.848832,14], "vector_layers": [{ "id": "veg", "description": "vegetation data (Biodiversity Center of Japan)", "maxzoom": 14, "minzoom": 0 }] }
おまけ github上のベクトルタイルをQGISで読み込む
hfuさんがgithubでベクトルタイルを公開されているので、それをQGISで読み込んでみます。
試しに、このベクトルタイルを表示してみます。
https://github.com/hfu/chome-vt
自分のgistでレイヤ情報を作成します。
https://gist.github.com/tmizu23/5d427e657e6553c361881a3ec16683ed
RAWボタンを押して、そのURLをプラグインのタイル情報のTile Json URLに設定します。
- Name: chome-vt
- Tile Json URL: https://gist.githubusercontent.com/tmizu23/5d427e657e6553c361881a3ec16683ed/raw/6677e5afa8385e1e5d60699855b0e6b6ef772cba/test.json
- GL JSON Stle URL:空白(スタイル設定は、まだ試してません)
もちろん、属性のラベルも表示できます。
おまけ mbtilesをQGISで読み込む
tippecanoeでmbtilesに変換した場合も、Vector-Tiles-Readerで表示できます。
QGISのメニューからベクタ > Vector Tiles Layer > Add Vector Tiles Layer..で「MBTiles」タブを選択して、ファイルを選べばOKです。
※pbfも「Directoris」タブで読み込めるはずですが、属性に日本語があるとmetadata.jsonの読み込みでエラーになるようです。(こっちはmetadata.jsonを参照するようです。)
まとめ
バイナリベクトルタイルもQGISでデータを取得、表示できるようになってきました。ベクトルタイルは、データそのものなので、編集も着色も自由にできます。WebGIS用と思われているベクトルタイルですが、その恩恵はデスクトップGISにもありそうです。バイナリベクトルタイルの普及が進んで、県ごとのshpファイルを別々にダウンロードして、解凍して、結合してみたいな面倒なことをしなくて済むようになると良いですね;-)
(そういえば、WFSってのが昔あった気がしますが、どうなったんですかねー?)
来週は、Vector-Tiles-Readerのソースコードを移植して、Rでバイナリベクトルタイルを読み込めるようにしてみたいと思います。
では、また。