はじめに
法務省登記所備付地図データの地図XML形式はそのままではGISソフトなどで描画することが出来ないため、GeoJSON形式に変換するコンバーターがデジタル庁から公開されています。
デジタル庁コンバーターの機能
デジタル庁コンバーターの機能はXML形式からGeoJSON形式に変換するものですが、G空間情報センターから配布されている大量のファイルをシェルスクリプトで一括処理をする時に、痒い所に手が届かない部分があります。
個人的に足りないと感じた機能は次のものです。
- GeoJSONファイルが出力されるディレクトリがXMLファイルと同一のディレクトリになってしまう
- 配布されているデータはZIPファイルになっているので、別途XMLファイルに展開(unzip)する必要がある
コンバーターの魔改造
デジタル庁のリポジトリをフォークしたリポジトリで機能追加を行いました。
1.出力先ディレクトリを指定するオプション
コマンドラインオプションで -o / --output を付加することで出力先のディレクトリを指定します。
mojxml2geojson -o outputDirectory ./mojmap.xml
mojxml2geojson --outout outputDirectory ./mojmap.xml
上記のように指定すると outputDirectory/mojmap.geojson
が生成されます。
2.ZIPファイルを自動展開
XMLファイルを圧縮したZIPファイルを指定すると、一時ディレクトリに自動でXMLファイルを展開し、そこからGeoJSONファイルを生成します。一時ディレクトリと展開されたXMLファイルは変換終了後に削除されます。
mojxml2geojson -o outputDirectory ./mojmap.zip
一時ディレクトリの操作には tempfileモジュールを、.zipファイルの展開には zipfileモジュールを使用しました。
import zipfile
import tempfile
with tempfile.TemporaryDirectory() as tmp_dir_name:
path_tmp_dir = pathlib.Path(tmp_dir_name)
# zipファイルを展開する
with zipfile.ZipFile(zip_file) as zf:
# ファイル名のリストを取り出す
zf_names = zf.namelist()
# 一時ディレクトリ内に展開
zf.extractall(path_tmp_dir)
実際の処理は GitHubのリポジトリで公開しています。
使い方
G空間情報センターから大分県日田市のデータをダウンロードします。2023年版のファイルは 44204-3207-2023.zip となります。
44204-3207-2023.zip を unzip すると 44204-3207-2023 というディレクトリが出来ます。
44204-3207-2023ディレクトリ内に展開されたzipファイルから、outputディレクトリへ geojsonファイルを生成するには以下のようなコマンドで処理できます。
% ls 44204-3207-2023/*.zip | xargs -n 1 -I{} mojxml2geojson -o output {}
注意
G空間情報センターで公開されているファイルは xmlファイルを一つずつ圧縮してzipファイルにし、さらにそれら複数のzipファイルを一つのzipファイルにまとめるという構成になっています。現在のバージョンではこの構成には対応していないので、ダウンロードしたzipファイルを一度展開する必要があります。
参考リンク