geo
OpenMapTiles

バイナリベクトルタイルの拡張子が mvt であったり pbf であったりするのはなんでだろう

バイナリベクトルタイルの拡張子が多様であることと、それが生み出す選択圧の話です。

実情

バイナリベクトルタイルの拡張子については、次の通り割れています。

Mapbox は vector.pbf

Mapbox さんの場合には、https://{s}.tiles.mapbox.com/v4/{layers}/{z}/{x}/{y}.vector.pbf というタイプのテンプレートURLを使っており、拡張子は、対外的に約束されたものではありませんが、vector.pbf を使っています。

Mapzen (Tilezen) は mvt

Mapzen さんの場合には、http://tile.mapzen.com/mapzen/vector/v1/{layers}/{z}/{x}/{y}.{format} というタイプのテンプレートURLを使っており、バイナリベクトルタイルの場合には {format} に mvt を当てることにしていますので、拡張子は mvt です。

OpenMaptiles は pbf.pict

OpenMapTiles さんの場合には、https://free.tilehosting.com/data/v3/{z}/{x}/{y}.pbf.pict というタイプのテンプレートURLを使っており、拡張子は、対外的に約束されたものではありませんが、pbf.pict を使っています。

esri は pbf

esri さんの場合には、 https://basemaps.arcgis.com/arcgis/rest/services/{id}/VectorTileServer/tile/{z}/{y}/{x}.pbf というタイプのテンプレートURLを使っており、拡張子は、対外的に約束されたものではありませんが、pbf を使っています。

hfu は mvt

私の場合、拡張子は mvt を使っています。tippecanoe や OpenMaptiles で作成した mbtiles をファイルシステムに展開する際に使う fan_out.rbfan-out.js をそのように実装しているためです。

仕様の記述

バイナリベクトルタイルの仕様書である vector-tile-spec 2.1 は、拡張子について次の通り記載しています。

2.1. File Extension

The filename extension for Vector Tile files SHOULD be mvt. For example, a file might be named vector.mvt.

ここを素直に読めば、拡張子は mvt とすべきですが、SHOULD の「拘束力」を確認する必要があります。vector-tile-spec は RFC 2119 に準拠するところ、RFC 2119 が定義する SHOULD の意味は、次の通りです。

3. SHOULD   This word, or the adjective "RECOMMENDED", mean that there
   may exist valid reasons in particular circumstances to ignore a
   particular item, but the full implications must be understood and
   carefully weighed before choosing a different course.

つまり、特定の環境のもとで、この規定を無視する理由があってもよいということですから、Mapbox, OpenMapTiles, esri の場合にはそのような理由があって mvt という拡張子を使っていないというふうに解釈することができます。

なお、ブランチを切って作業が進められている(が2016年10月以降更新がない)vector-tile-spec 3.0でも、この2.1節はそのまま残っています。

考察

拡張子の多様性の存在

特定の環境の都合で、バイナリベクトルタイルの拡張子には多様性があります。拡張子は飾りですが、バイナリベクトルタイルの拡張子にこのような多様性があることは知っておいても悪くはありません。とりわけ、新たにバイナリベクトルタイルを生産する方は、知っておいて損はありません。

拡張子の多様性が作る選択圧

また、拡張子の多様性を隠蔽するために、style.json(や scene.yaml)のレベルでバイナリベクトルタイルのメタ情報を交換したいという「選択圧」がここで発生しているということになる、と私は感じています。

tilejson と style.json はカニバるか

なお、この選択圧に応じる仕様として、tilejson も考えられますが、style.json と食い合ってしまうのか、(設計通りに)tilejson と style.json の二段構えが主流になるのか、私はよく見通せていません。いまのところ、私は tilejson をパスして style.json を使うようなことをしています。