LoginSignup
0
1

登記所備付地図データのコンバーターを魔改造

Posted at

はじめに

法務省登記所備付地図データの地図XML形式はそのままではGISソフトなどで描画することが出来ないため、GeoJSON形式に変換するコンバーターがデジタル庁から公開されています。

デジタル庁コンバーターの機能

デジタル庁コンバーターの機能はXML形式からGeoJSON形式に変換するものですが、G空間情報センターから配布されている大量のファイルをシェルスクリプトで一括処理をする時に、痒い所に手が届かない部分があります。

個人的に足りないと感じた機能は次のものです。

  1. GeoJSONファイルが出力されるディレクトリがXMLファイルと同一のディレクトリになってしまう
  2. 配布されているデータは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.zipunzip すると 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ファイルを一度展開する必要があります。

参考リンク

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