取り組みの背景
背景1.巷で話題のPMTilesを触ってみる
大規模な地理データをストレージから提供可能な技術「PMTiles」
このPMTilesがGeoJSONから直接生成可能になったとのことで試してみようと思いました。
*今まではMBTilesからしか生成できなかったとのこと。
背景2.UNVTを試して、理解する
2つ目の背景として、UNVTを試して理解しようと思いました。
「UNVTとは、国連ベクタータイルツールキット(UNVT)は、Webマッピング用のベクタータイルを作成、ホスト、スタイル設定、最適化するためのオープンソースソフトウェア(OSS)のコレクション」とのこと。
また、OSSコレクションに限らず、Vectorデータの生成からWebでの配信に関してドキュメントも整備されているとのことで、小職は、これらまとめて、Vectorデータの取り扱いのいわゆるベストプラクティスのようなものではないかと理解しております。
*私、個人的には地理データの取り扱いやツール群は、
あまり一般化されていないように感じていたので、かなりありがたいです。
その中に比較的新しいPMTilesに関するライブラリが含まれていることもイケているポイントだと重みます。
前提
Dockerがインストールされていること
筆者は下記のコマンドでdockerのインストール状況を確認しました。
docker -v
Docker version 20.10.13, build a224086
手順
手順1.unvt/nanbanのDockerイメージをダウンロードし、ターミナルから接続する
下記のコマンドを実行するとDocker環境に接続した状態になるので、
次の手順に移りましょう。
docker run -it --rm -v ${Docker環境と連携したいローカル環境のディレクトリパス}:/data unvt/nanban
補足: Googleさん曰く、unvt/nanban は、開発者向けの UNVT Dockerfile です。Ubuntu をベースとしており、Docker でユーザーフレンドリーな UNVT 環境を実現します。
とのことです。
手順2.変換元になるGeoJSONをDocker環境から参照できるようにする
1.で指定したローカル環境のディレクトリパス配下に変換元のGeoJSONファイルを格納しましょう。
筆者は「Ctrl + t」で別のターミナルを立ち上げ、下記のコマンドを実行しました。
cp ${格納しているディレクトリの絶対パス}/hoge.geojson $PWD
手順3.GeoJSONのフィルター設定用のymlファイルを作成し、設定を記述する
touchコマンドで任意の名前のymlファイルを作成しましょう。
任意のファイル名ですが、筆者はkata.ymlとしました。
touch ${任意のファイル名}.yml
作成したymlファイルに設定を記述します。
今回はGeoJSONを表示するための最小のズーム倍率と最大のズーム倍率を記述しました。
ここで、propertiesなども指定することで、
特定のプロパティの値が特定のデータのみをPMTilesに変換できるようになる模様です。
${任意のLayer名}:
source: ${Docker環境上のgeojsonのパス}
minzoom: 0
maxzoom: 5
# hogeプロパティが1のデータのみPMTilesの変換対象にする場合
# properties:
# hoge: 1
手順4.tippecanoeを利用したPMTilesへの変換
いよいよGeoJSONからPMTilesへの変換処理です。
下記のコマンドを実行ください。
kata filter kata.yml | tippecanoe -o ${任意のファイル名}.pmtiles --no-tile-compression --no-feature-limit --no-tile-size-limit
実行すると下記の流れで処理が進みます。
kataコマンドでGeoJSONをフィルター
↓
フィルターされたGeoJSONが出力される
↓
出力結果をtippecanoeへ渡す(パイプ)
↓
PMTilesへ変換
生成されたPMTilesの確認方法
下記のサイトで、PMTilesの確認が可能です。
ローカルに生成されたファイルをアップロードしてみましょう。
分かったこと
・GeoJSONからPMTilesへの直接変換は可能でした。
・複数のGeoJSONファイルをPMTilesに変換する場合は、事前にGeoJSONファイルをマージしておく必要がありますね。
・40MBのGeoJSONを変換するためにも10秒前後の時間がかかったため、より大規模なデータを取り扱う場合は工夫が必要そうですね。
・kataコマンドによるフィルター処理を今回は記述しましたが、こちらスキップしてもいいかもしれないですね。まさにこのフィルターの流れがUNVTの流れを考慮した処理フローと理解していいと思います。
宿題
kataコマンドやtippecanoeのオプションなどは、
リファレンスを元に理解を深める必要がありそうです。
参考
■参考にさせていただいたQiitaの記事です。多大なる感謝を送らせてください。
■Dockerコマンド確認用
■ターミナルでcpコマンドを使う時にコピー元とコピー先の指定の仕方が分からなくなった時用
■UNVTのアプローチも参考になりました
■UNVTについてもっと詳しく