地理院ベクトルタイルを mbtiles にダウンロード・差分更新できるツール

Posted by keita-kobayashi on December 16, 2021 · 1 min read

この記事は、ベクトルタイル Advent Calendar 2021 の16日目の記事です。

国土地理院がいくつかの地図タイルを配信している。この一覧では全てラスタータイルですが、実験的にラスターではなく、ベクトルタイルを配信しています(詳細は地理院のページをご覧ください)。

ラスタータイルとベクトルタイルの違いは省略されていただきますが、興味ある方は地理院のページをご確認ください

最初、私が実験的に地理院のいくつかのタイルセットをダウンロードして自分のパソコンで操作を試してみようと思いました。ちょうど、地理院が tdlmn という実験的なツールを公開していたので使ってみました。ただ、いくつかの課題がありました。

最初、 mbtiles という形式にタイルを落とし込みたかった。ただ、 tdlmn ツールはファイルシステムにダウンロードするツールであり、一回ダウンロードした後に mb-util などのツールを使って mbtiles のファイルに落とし込む必要がありました。

次は、タイルセットの種類によってはデータ量とファイル数が非常に多くて、処理の時間に結構時間かかった。

一番最初に、hillshademap (陰影起伏図) のタイルセットで実験していましたが、 tdlmn でダウンロード自体が24時間ぐらいかかって、そこから mbtiles に変換するのがまた24時間かかりました。。

その間、 @geolonia/gsi-mbtiles-tool を開発しました。

gsi-mbtiles-tool は上記のプロレスと基本的なところで2つ異なります

  • ユニークなタイルしかダウンロードしない
  • mbtiles に直接格納する

地理院タイルが全て非常に便利なmokuroku.csv」というファイルがつきます。

こちらのCSVファイルに、全てのタイルのURL、タイルの最新更新日時とMD5ハッシュ値が入っています。 こちらのファイルを使って、MD5のハッシュ値からユニークなタイルのみダウンロードし、 mbtiles のファイルに格納する。

mbtiles のファイルは、普通の sqlite3 のデータベースでもあるので、それぞれのタイルのメタ情報(mokurokuに入ってるMD5ハッシュ値、最終更新日時など)を保存しています。差分更新を実施する場合、変更したタイルのみダウンロードするような形になっているので、更新は非常に速い(最新のmokurokuをダウンロードする時間がほとんど)。

使い方

npm install -g @geolonia/gsi-mbtiles-tool
gsi-mbtiles-tool -o experimental_bvmap.mbtiles experimental_bvmap

これで「地理院地図Vector(仮称)」が experimental_bvmap.mbtiles にダウンロードが開始されます。(注意: 全部ダウンロードすると 37-38GB になるので、ご注意ください)

experimental_bvmap.mbtiles が既に存在する場合、最新の mokuroku をダウンロードしたら差分更新を行います。

この mbtiles のファイルは、QGISで表示したり、tileserver-gl で配信したりできます。

tileserver-glで配信する場合、スタイルも必要です。ぜひ Geolonia の GSI スタイルを試してください。

終わりに

このツールが便利と思いましたら、ぜひ使ってみてください。もし改善できそうなところなど思いついたら、遠慮なく GitHub で Issue や Pull Request を開いてください。



Geolonia では、ウェブ地図や位置情報を利用したウェブアプリケーションや、モバイルアプリケーションの開発を承っています。

お問い合わせ