はじめに
この記事は FOSS4G Advent Calendar 2023 11日目の記事です。
GIS界隈ではCloud Optimizedが重要なキーワードになっています。Cloud Optimizedとは、特別なサーバ実装を必要とせず、大きな位置情報データの一部分を配信することを可能とするファイル形式の総称です。本記事は、Cloud Optimized形式のうち、PMTiles(ベクトルタイル)の生成方法に焦点を当てた記事になります。具体には、京都市がオープンデータとして公開している、京都市固定資産税(土地)地番図データからPMTilesを生成する方法について説明します。PMTilesの生成方法については、Zennでも記事を書いていますので、あわせてご覧ください。
PMTilesの特徴
- 単一ファイル形式のタイルデータ
- ラスタータイル、ベクトルタイルともに対応
- 地球規模のタイルマップの保存
- S3 のようなストレージとHTTP Range Requestsのみを使用
PC環境
OS:Windows 10 Pro
CPU:Intel Core i7-9700
メモリ:32GB
前提条件
- ベクターデータからPMTilesの生成は、手元にMBTilesがあるならProtomaps公式のgo-pmtilesを使用したほうが良さそうです。
- 一方で、手元にGeoJSONやFlatGeobufがあるならfeltのtippecanoeを使用したほうが良さそうです。
- 今回は、後者のfeltのtippecanoeを用いた、PMTilesの生成方法について説明します。
環境構築
- QGISがインストール済みであること。
- QGISのバージョンは、3.34.0です。
- WSL2(Ubuntu-20.04)がインストール済みであること。
- feltのtippecanoeがインストール済みであること。
- Windows 10へのtippecanoeのインストール方法は下記のとおりです。
-
ただし、上記に記載の
git clone https://github.com/mapbox/tippecanoe.git
の箇所をgit clone https://github.com/felt/tippecanoe.git
への変更が必要です。 -
tippecanoeのバージョンはv2.23.0です。
-
下記のサイトより京都市固定資産税(土地)地番図データのシェープファイルをダウンロードし、解凍済みであること。
シェープファイルからFlatGeobufを生成
- シェープファイルからFlatGeobufの生成にはQGISを使用します。
- 地番図データの座標参照系(CRS)が平面直角座標系6系(EPSG:2448)なので、エクスポート時の座標参照系(CRS)をWGS84(EPSG:4326)にしておきます。
FlatGeobufからPMTilesを生成
- FlatGeobufからPMTilesの生成にはfeltのtippecanoeを使用します。
- WSLを起動して、下記のコマンドを実行します。
tippecanoe -o kyotoshi_chiban_r05.pmtiles kyotoshi_chiban_r05.fgb -pf -pk -P
- tippecanoeのオプション
-P:並列読み込み
ただし、下記の記事によると、-Pオプションが有効なのは、GeoJSONSeqのみのようです。
-pf:地物数制限を無視する(1タイルあたり200,000フィーチャに制限しない)
-pk:ファイルサイズ制限を無視する(1タイルあたり500Kバイトに制限しない)
-z, -Z:ズームレベル指定
- ズームレベルを指定する場合は下記のとおりになります。
- -Z10 -z18とすると、ズームレベル10-18の範囲でタイルを生成します。
- 指定しない場合は自動的に設定されます(ズームレベル0~14)。
- 大文字のZが最小ズームレベル、小文字のzが最大ズームレベルを示すことに注意が必要です。
tippecanoe -o kyotoshi_chiban_r05.pmtiless -Z10 -z18 kyotoshi_chiban_r05.fgb -pf -pk -P
- 下記でズームレベルごとの地理分解能の概数がわかります。
- ズームレベル14で0.5m相当となり、これは一般的なWeb地図では十分な分解能と言えます。
- お好みでより高い精度を求めることは可能ですが、タイル数とのトレードオフになります。
生成したPMTilesの確認
- 生成したPMTilesの確認には、PMTiles Viewerが便利です。
- PMTilesをドラッグ&ドロップすると、フィーチャが地図上に表示されます。
生成したPMTilesをMapLibre GL JSで表示する
- 上記の方法で生成したPMTilesとMapLibre GL JSで作成したデモサイトを下記のGitHubにて公開しています。
参考文献