LoginSignup
16
14

More than 5 years have passed since last update.

tippecanoe の tile-join の6つの地道な使い方

Last updated at Posted at 2018-06-29

tippecanoe をインストールするとついてくるコマンド tile-join について、これまで属性の JOIN をする目的のものと感じ違いしていたのですが、次のような地道な使い方ができるように思います。あとで検証します。

tile-join に対する誤解の解消

tippecanoe の README.md で、tile-join は次のように説明されています。

Tile-join is a tool for copying and merging vector mbtiles files and for joining new attributes from a CSV file to existing features in them.

この and を「かつ」という意味に私は読んでしまい、これまでは CSV テーブルとの JOIN を行うことが主眼のツールであると勘違いしていました。実際には、そういった意味での JOIN 作業を行わない場合にも、このツールは当然使えますし、README.md をみる限りも、ベクトルタイルパッケージ(mbtiles)周りの地道な作業に使えるようです。

本稿では以下、具体的な地味な使い方6つを紹介します。

(1) ベクトルタイルパッケージをマージする

次のコマンドで、a.mbtiles と b.mbtiles に含まれるタイルが全てコンバインされるそうです。同じタイルに同じレイヤがあったとしても、しっかりとマージしてくれるように書かれています。

$ tile-join -f -o out.mbtiles a.mbtiles b.mbtiles

-f は、out.mbtiles がすでに存在している場合に上書きするためのオプションです。

(2) ベクトルタイルをファイルシステム展開する

a.mbtiles にパッケージされているベクトルタイルを tiles というディレクトリに展開します。

$ tile-join -e tiles a.mbtiles --no-tile-compression

これまで、私は fan-out というシリーズの Node.js スクリプトを作っていましたが、これは不要かもしれない、ということになります。

2018-09-27: --no-tile-compression オプションを付加するべきことを追記。

実際にやってみた感想

ファイルシステム展開については、実際にやってみました。指定したフォルダの直下に {z} のフォルダが作成され、中に {z}/{x}/{y}.pbf の名前でファイルが展開されます。

なお、展開の速度は tippecanoe と大体同じくらいです。速いファイルシステムならば早く、遅いファイルシステムならばそれなりに書き出される、ということだと思います。

vector-tile-spec ではベクトルタイルの拡張子に .mvt を使うべき (SHOULD) とされているのに、vector-tile-spec v2 を採用した段階で Mapbox さんのプロダクトですら拡張子が .mvt になったことはよく知られており、現在、ベクトルタイルに拡張子 .mvt をつけて提供している著名なサービスはないようです。

このツールの挙動も、ベクトルタイルの拡張子は .pbf とするという見解を補強してくれるようです。

(3) レイヤの抽出

ベクトルタイルパッケージ a.mbtiles の中から特定のレイヤ buildings を抽出して新しいベクトルタイルパッケージ out.mbtiles を作るには、次のようにすると良さそうです。

$ tile-join --layer=buildings -f -o out.mbtiles a.mbtiles
$ tile-join -l buildings -f -o out.mbtiles a.mbtiles

(4) ズームレベルの削り込み

ベクトルタイルパッケージ a.mbtiles のズームレベル 4 から 6 だけを取り出した out.mbtiles を作るには、次のようにすると良さそうです。

$ tile-join -z 6 -Z 4 -f -o out.mbtiles a.mbtiles
$ tile-join --maximum-zoom=6 --minimum-zoom=4 -f -o out.mbtiles a.mbtiles

(5) 余計な属性の削除

余計な属性 fid をベクトルタイルパッケージ a.mbtiles から削除したベクトルタイルパッケージ out.mbtiles を作るには、次のようにすると良さそうです。

# tile-join -x fid -f -o out.mbtiles a.mbtiles

(6) 地物単位でのフィルタリング

Mapbox GL Style Specification の filter expression を使って、a.mbtiles からマッチした地物だけを抽出した out.mbtiles を作るには、次のようにすると良さそうです。

$ tile-join -j 'filter' -f -o out.mbtiles a.mbtiles

filter expression については、もう少し研究してあとで書きたすようにします。

ただし、filter expression は deprecated になっている ので、この機能が長期的に安定していることを期待することは避けたほうが良さそうです。

※500KB 以上になるベクトルタイルはコピーされない

デフォルトでは、500KB 以上になるベクトルタイルはコピーされないそうです。 --no-tile-size-limit でこの挙動はキャンセルされるとのこと。

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14