3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vt-optimizerの使い方

3
Last updated at Posted at 2025-12-27

はじめに

ベクトルタイルを生成して配信する際に、ユーザーが感じるウェブ地図表示スピードはかなり重要です。
こちらのgoogleのページによると、モバイルサイトでページ読み込みに3秒以上かかると 53% のユーザーがページを離脱するという結果があります。個人的にも読み込みの遅いサイトだとストレスを感じ、見るのをやめてしまう場合があります。
ベクトルタイルの配信に関しては、そのデータサイズが表示パフォーマンスに直結します。そのため、ベクトルタイルのデータサイズなどを確認する必要がありますが、調べたところvt-optimizerが使えそうなので、本記事では、その使い方について記載します。

使用データ

使用するMBTilesファイルはmaptilerさんのページの広島のデータをダウンロードしました。

Screenshot 2025-12-24 at 11.58.18 AM.jpg

スタイルファイルはこちらのデータを使用します。

vt-optimizerの使い方

vt-optimizerを使用します。
関連記事もあり、こちらによると平均タイルサイズは50KB、全てのタイルは500KB以下にすべきという指針が示されています。

vt-optimizerのインストール

上記GitHubレポジトリをクローンして、npm installとしましたが、エラーが発生しました。
vt-optimizerは古いソフトでnodeのバージョンが22などの新しいものには対応していないようです。nvmで16に変更して、さらに必要なpythonもインストールして対応しました。

解析モード

vt-optimizerには解析モードと最適化モードの2つのツールがあります。解析モードでは解析が可能で、まずはこれを試してみます。ローカルに作業レポジトリを作成して、Dataフォルダの下にダウンロードした広島のデータを格納しています。

node ./index.js -m ./Data/osm-2020-02-10-v3.11_japan_hiroshima.mbtiles

として解析開始します。

Screenshot 2025-12-24 at 2.58.43 PM.jpg

以下の情報が表示されました。

  • 対象ファイルのズームレベルが0から始まっていること
  • Formatがpbfであること
  • 中心の緯度経度
  • 使用されているレイヤ一覧

Screenshot 2025-12-24 at 3.00.24 PM.jpg

また、以下の情報も表示されました。

各ズームレベルの

  • タイル数
  • トータルデータサイズ
  • 平均サイズ
  • 最大サイズ

平均サイズが50KBに近い場合には黄色で警告が、50KBを超える場合は赤色でエラー表示されます。

さらに、どのズームレベルについて詳細を見たいのかを問われて、試しにズームレベル13を選択しました。
そうすると、ズームレベル13に含まれるタイルが、タイルサイズ毎に10分割したリストが表示されました。このリストには、以下が含まれます。

  • 閾値の最小と最大
  • タイル数
  • 平均タイルサイズ
  • 何%のタイルが該当閾値内に存在するか
  • 閾値内で何%の容量を占めているか
  • 累積したタイル数の占める割合
  • 累積した容量の占める割合

Screenshot 2025-12-24 at 3.14.39 PM.jpg

さらに、その閾値内に含まれるタイル情報を見たいか聞かれるので、9番目の51.28KBから57.57KBの範囲に存在する情報を選択しました。

Screenshot 2025-12-24 at 3.17.13 PM.jpg

そうすると、上記の情報が表示されました。
ここで、タイル座標を確認したところ、13/7111/4929はオーストラリアの南海上の場所でした。なぜこのような想定と異なる情報が表示されるのか調べたところ、Y軸が下から始まるTMS(Tile Map Service)と、上から始まるXYZとの違いによるものだと思われます。vt-optimizerはタイル座標を、Y軸が下から始まるTMS仕様で出力しているのだと考えられます。
ただ、現在はXYZがデファクトスタンダードです。TMS仕様のY座標を変換してXYZのY座標にすることも出来ますが、毎回実施するのも手間がかかるため、TMS仕様とXYZ仕様のY座標を同時に確認できるサイトを探したところ、こちらのサイトで可能であることが分かりました。

ちなみに、こちらの公式情報によると、以下の通り記載されており、MBTilesの仕様はTMSであることが分かります。

Note that in the TMS tiling scheme, the Y axis is reversed from the "XYZ" coordinate system commonly used in the URLs to request individual tiles, so the tile commonly referred to as 11/327/791 is inserted as zoom_level 11, tile_column 327, and tile_row 1256, since 1256 is 2^11 - 1 - 791.

計算方法もズームレベルが11でYが791の場合は、「2^11 - 1 - 791」であることが記載されています。

さらに、詳細なタイル情報を取得したいかと聞かれ、yesと回答して、対象とするタイルを選択すると、以下が表示されました。

Screenshot 2025-12-26 at 11.43.05 AM.jpg

以下の情報が表示されます。

  • レイヤ数
  • 地物数
  • 頂点数
  • 属性数
  • 属性が持つ値の数

また、それぞれのレイヤに対して、以下の情報が表示されます。

  • 頂点数
  • 地物数
  • 属性数
  • 属性が持つ値の数

最適化モード

次に最適化モードを試してみます。このモードではスタイルファイルが必要です。前述したスタイルファイルをローカルにコピーします。

以下の通り実行出来ます。

node ./index.js -m ./Data/osm-2020-02-10-v3.11_japan_hiroshima.mbtiles -s ./Styles/maptiler-basic-gl-style.json -o ./Data/osm-2020-02-10-v3.11_japan_hiroshima_output.mbtiles

アウトプットファイルを以下の通り定義しています。
/Data/osm-2020-02-10-v3.11_japan_hiroshima_output.mbtiles

Screenshot 2025-12-26 at 12.16.02 PM.jpg

上記の通り、使用されていない地物とレイヤーを削除することができます。この機能を使用することで、ベクトルタイルに変換する時点で削除可能なデータを見つけることが出来そうです。
上記の例だと35.9MBが34MBとなり、少しだけデータサイズを減らす事ができました。

ベクトルタイルデータの簡略化

vt-optimizerにはタイルを指定して、データを簡略化する機能があります。

node ./index.js -m ./Data/osm-2020-02-10-v3.11_japan_hiroshima_output.mbtiles -x 7111 -y 4929 -z 13 -l transportation -t 1

しかし、なぜかエラーが発生しました。

Screenshot 2025-12-26 at 4.50.37 PM.jpg

node ./index.js -m ./Data/osm-2020-02-10-v3.11_japan_hiroshima_output.mbtiles -x 4929 -y 7111 -z 13 -l transportation -t 1

xとyの値を入れ替えるとなぜか成功します。

Screenshot 2025-12-27 at 5.27.42 PM.jpg

vt-optimizerの簡略化に関するプログラムで、どこかでxとyを取り違えているのかもしれませんが、詳細不明です。
ここでは、レイヤtransportaionを許容値(tolerance)1で簡略化しており、11855個あったverticesが6900個程度に減少しています。

Screenshot 2025-12-26 at 4.56.50 PM.jpg

まとめ

vt-optimizerの使い方についてまとめました。2018年に作成されたソフトであるものの、ベクトルタイルのサイズを網羅的に知ることができ、ウェブ地図のパフォーマンスに関わるベクトルタイルデータサイズをどのように減少させるかの指針として、利用価値の高いソフトだと思います。

Reference

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?