この記事は、ベクトルタイル Advent Calendar 2021 の16日目の記事です。
国土地理院がいくつかの地図タイルを配信している。この一覧では全てラスタータイルですが、実験的にラスターではなく、ベクトルタイルを配信しています(詳細は地理院のページをご覧ください)。
ラスタータイルとベクトルタイルの違いは省略されていただきますが、興味ある方は地理院のページをご確認ください。
最初、私が実験的に地理院のいくつかのタイルセットをダウンロードして自分のパソコンで操作を試してみようと思いました。ちょうど、地理院が tdlmn
という実験的なツールを公開していたので使ってみました。ただ、いくつかの課題がありました。
最初、 mbtiles という形式にタイルを落とし込みたかった。ただ、 tdlmn
ツールはファイルシステムにダウンロードするツールであり、一回ダウンロードした後に mb-util
などのツールを使って mbtiles のファイルに落とし込む必要がありました。
次は、タイルセットの種類によってはデータ量とファイル数が非常に多くて、処理の時間に結構時間かかった。
一番最初に、hillshademap
(陰影起伏図) のタイルセットで実験していましたが、 tdlmn でダウンロード自体が24時間ぐらいかかって、そこから mbtiles に変換するのがまた24時間かかりました。。
その間、 @geolonia/gsi-mbtiles-tool
を開発しました。
gsi-mbtiles-tool
は上記のプロレスと基本的なところで2つ異なります
地理院タイルが全て非常に便利な「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 を開いてください。