LoginSignup
2
1

データ変換済み地図XML(GeoJSON)2023年度版をWindowsパソコン(WSL)でPMtiles形式のベクトルタイルにする

Posted at

はじめに

目的

2022年度以降、G空間情報センターから公開されている法務省の法務局登記所備付データ(地図XML)が公開され、これまでにいろいろな方が作業されています。特に、公共座標系の筆のデータはベクトルタイル(Pmtiles形式)に変換することでウェブ地図で容易に閲覧することが可能ということも実証されています(たとえばamx-project)。

私もamx-project/aのレポジトリで作成されていた2022年度版のPmtilesデータを使って自分のウェブ地図を作っていましたが、新しい年度の筆データを使いたいと思いました。そこで今回、2023年度の筆のデータのベクトルタイルを準備するということで、2023年度の地図XMLの公共座標データ(GeoJSONに変換されて公開されているもの)を使って、ベクトルタイル(Pmtiles形式)を作成しました。ここでは、その手順をメモしておきます。

なお、2024年度版の地図XMLについてはG空間情報センターからGeoJSONフォーマットのものが公開されていないので、今後、自分でコンバーターを使ってGeoJSONを作って作業するか、G空間情報センターでデータが公開されるのを待って作業したいと思います。

工夫した点

  • G空間情報センターからのデータダウンロードはAPIを使い、省力でデータを入手できるようにしました。
  • 今回は、Windows Subsystem for Linuxを使うことで私のWindows PCでもベクトルタイル変換ツールTippecanoeを使えるようにして作業しました。
  • ベクトルタイルは最終的にPMTiles形式にすることにしました。これにより、ウェブサイトで静的にホストするだけで使えます。

私の環境

  • Windows 11 home
  • WondowsPowerShell version 5.1 (Build 22621, Revision 2506)
  • WSL Ubuntu version 2
    • tippecanoe v2.53.0
    • GDAL 3.4.1, released 2021/12/27

手順

Step1: 地図XML変換済み(GeoJSON)のダウンロード

まずソースデータとなる地図XMLを入手することを考えます。最終的に公共座標のものだけを使うので、G空間情報センターから公開されているデータ変換済みのものを使うと早そうです。ベクトルタイルに変換することからGeoJSON形式がよいかと考えました。

変換済みの地図XMLデータ(2023年度版geojson)の名前が *R_2023.geojsonとなっていることを利用してG空間情報センターのAPIを利用してダウンロードしてきます。

$jsonData = (curl.exe 'https://www.geospatial.jp/ckan/api/3/action/resource_search?query=name:R_2023.geojson&limit=2500' | ConvertFrom-JSON)

for ($i=0; $i -lt $jsonData.result.results.name.length ; $i++ ){
  curl.exe -LO $jsonData.result.results.URL[$i]
}

image.png

最終的にこんな形で1,905ファイルがダウンロードできました。30時間くらいかかりました。GeoJSONは圧縮されていないので、ダウンロード時間で考えるとシェープファイルのほうが早かったかもしれません。
image.png

Step 2: WSL(Windows Subsystem for Linux) と関連ツールのインストール

これまで、私はWindows環境ではDockerでLinux環境を構築してベクトルタイル変換ツールtippecanoeを使ったり、Dockerのライセンス変更以降はRaspberryPiでベクトルタイル変換をしていたのですが、今回はWSLのUbuntuディストリビューションでtippeanoeを試してみようと思いました。

WindowsPowershellで以下を実行し、Ubuntuのディストリビューションをインストールします。

wsl --install

その後、Ubuntuを立ち上げ、rootユーザーに切り替えたのち、ベクトルタイル関係の関係ツールをインストールします。unvt/nanbanのDockerファイルを参考にして関係ツールをインストールしました。特に、felt/tippecanoeは必須です。
https://github.com/unvt/nanban/blob/master/Dockerfile

Step 3: データ変換

1,905のGeoJSONファイルを、まずは1,905のmbtilesに変換して(tippecanoe)、そのあと1,905のmbtilesを1つのpmtilesに統合する(tile-join)という方針を立てます。

データフォルダのマウント

Ubuntuを立ち上げ、データが入っている外付けHDDをマウントし、そこに移動します。

image.png

chizu-geojsonというディレクトリにデータを入れています。
image.png

GeoJSONをmbtiles形式のベクトルタイルに変換

出力用のフォルダをつくって、まずは個別のGeoJSONをmbtiles形式のベクトルタイルにしていきます。
tippecanoe の条件としては以下のようにしています。

  • 地物数の上限なし
  • サイズの上限なし
  • ズームレベルは14~16
    なお、属性の削除は最初の段階ではしませんでしたが、必要な場合は-xオプションで削除できると思います。
mkdir chizu2023-tile
for f in chizu-geojson/*.geojson; do tippecanoe -o chizu2023-tile/`basename ${f} .geojson`.mbtiles --no-feature-limit --no-tile-size-limit -Z14 -z16 -L fude:${f}; done

image.png

途中で空間参照について、期待される投影法と違うというメッセージがでているので、最終成果が正しいところに来るか要チェックです。もともとのデータはJGD2011でしょうし、変換後の座標は緯度経度で入っているので、これがWGS84として解釈されてもさほど大きなずれにはならないとは思います。
image.png

合計するとだいたい17.7GBですが、1,905個のmbtilesファイルができました。
image.png

多数のmbtilesを1つのPmtilesにマージ

これまでの作業で、chizu2023-tileというフォルダに1,905のmbtilesができているので、それらを1つのPMtilesデータにします。tippecanoeについてくるtile-joinというコマンドを使います。すべてのファイル名を入力するのは大変なので、fileLisという変数にファイル名を取り込んでコマンドを実行しています。

最初の挑戦(失敗)

cd chizu2023-tile
fileList=$(ls *.mbtiles)
tile-join -f --no-tile-size-limit -o b.pmtiles $fileList

2022年のPMtilesがa.pmtilesだったので2023年はb.pmtilesにしておきます。
image.png

特定のファイルが読み込めないようで失敗します。
image.png

そこでまずは都道府県ごとに

都道府県ごとにつくるとうまくいくところもあります。

cd chizu2023-tile
fileList=$(ls 01*.mbtiles)
tile-join -f --no-tile-size-limit -o b-01.pmtiles $fileList

都道府県くらいの小さいサイズでも22番がダメか確認したところ、ファイルサイズが大きくなければうまくいった。
image.png

まずは都道府県ごとにファイルをマージします。

for i in $(seq -w 1 47); do fileList=$(ls ${i}*_2023.mbtiles); echo $i;tile-join -f --no-tile-size-limit -o b-${i}.pmtiles $fileList; done

できました。
image.png

都道府県から全国を

最後に都道府県のタイルをまとめます。

fileList=$(ls *.pmtiles)
tile-join -f --no-tile-size-limit -o b.pmtiles $fileList

image.png

朝の3時にスタートしてほっといたのですが、10時前にはできていました。16.6GBでしたね。
image.png

結果とまとめ

今回、2023年度の地図XMLの公共座標データを地図XMLにしました。PMTiles形式にしたところ全体で16.6 GB程度でした。
次に時間ができたらこれを使ったウェブ地図を試してみようと思います。

参考ページ

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