（メモ）【法務省登記所備付地図（通称：地図XML）】WindowsPowershellでG空間情報センターから一括ダウンロード

# はじめに
ずいぶん前に、WindowsPowershellで地図XMLデータをダウンロードする方法の記事を書きました。今回は、自分のメモという動機になりますが、特定のファイルを一括でダウンロードする方法をメモします。

↓前回の記事

https://qiita.com/T-ubu/items/be5d0e577d7555c42c3f

# 私の環境
* Windows パソコン（Windows 11 home）
* Windows Powershell version 5.1
* Windows メモ帳 11.2311.35.0


# 手順
## Step 1: 以前の作業を思い出す
以下のポイントをまず思い出します：
* 地図XMLデータはG空間情報センターからダウンロードできます。APIでいろいろ情報も見られます。
* ファイルの命名規則は『（5桁の市区町村コード）-（４桁の法務局コード）-（西暦４桁）.zip』となっています。
* ２０２３年度版はファイル数が2,005ファイルありました。

PowerShellを立ち上げて以下のようなコマンドを実行して少し思い出します。G空間情報センターのAPIを使って、リソースから2023年の地図XMLデータの情報を抜き出します。そしてファイル名やダウンロードURLの構造を確認します。

```powershell
$jsonData = (curl.exe 'https://www.geospatial.jp/ckan/api/3/action/resource_search?query=name:-2023.zip&limit=2005' | ConvertFrom-JSON) #情報を取得
Write-Host($jsonData.result.results.name.length) #ファイルの数がわかる
Write-Host($jsonData.result.results.name[0]) #一番最初のファイルの名前
Write-Host($jsonData.result.results.URL[0]) #一番最初のファイルのダウンロードURL
```
↓実行するとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/45f8384e-ff2c-85bd-29e7-aa39e49f91c6.png)


## Step 2: ダウンロードするファイルリストを作成
2.005のファイルについて、ファイル名一覧が得られるので、必要なファイル名を残してリストします。以下のコマンドのようにすべてのファイル名を出力して、そのあとメモ帳等でその中から必要なファイルを残してもいいかもしれませんね。

```powershell
# APIで取得したファイル名一覧を、ソートして、name2023.txtとして書き出す。
Write-Output ($jsonData.result.results.name) | Sort-Object | Out-File name2023.txt
```

この中からダウンロードしたいファイルを残してリストを作ります。最初の2桁は都道府県を表すので、今回は練習として、ファイル名が15で始まるもの（新潟県のもの）を残してリストを作ります。メモ帳を使いました。結果を download_list.txtとして保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/1de5b279-931f-8796-cbcb-ffe5f6260da2.png)

（参考）
ファイルの命名則に使われている市区町村コードは総務省の提供する全国市町村コード（6桁）ではなく、またどの法務局がどの市区町村データを提供しているかわからないので、ファイル名と必要な市区町村の対応をつけるのは地道に大変です。ここで使っている5桁の市区町村コードはたぶんJIS X 401 と402 ではないかと思っています（2桁の都道府県コードと、それに3桁追加して5桁の市区町村コード）。

## Step 3: ファイルのダウンロード
ここまでで作業フォルダに download_list.txt　がある状態になっていますが、以下のようにコマンドを実行してファイルをG空間情報センターからダウンロードします。

```powershell
# データダウンロード用のディレクトリを作成
mkdir data
cd data

# 地図XML（2023年版）のファイル名、ダウンロードURL等を取得
#（必要に応じてAPIのクエリ文とクエリ結果をチェックすること）
$jsonData = (curl.exe 'https://www.geospatial.jp/ckan/api/3/action/resource_search?query=name:-2023.zip&limit=2005' | ConvertFrom-JSON)

# すべての地図XMLをチェックし、それがダウンロード対象としてリストにあればダウンロード
for ($i=0; $i -lt $jsonData.result.results.name.length ; $i++ ){
  $check = ""
  $check = Select-String $jsonData.result.results.name[$i] "../download_list.txt"
  if($check.length -eq 1){
    curl.exe -LO $jsonData.result.results.URL[$i]
  }
}
```

なお、コマンド中のcurl.exeには、-HオプションでG空間情報センターにログインしたときのAPI Keyをつけておくとよいかと思います。（-H"X-CKAN-API-Key:<自分のAPI Key>"）


↓以下のような感じでダウンロードが進んでいきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/f90dad27-9ca8-2988-1d62-d1f4815d8fbb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/bb9e9835-9933-591d-037e-180d7b0e88f6.png)

これで終わりです。お疲れ様でした。


# まとめ
自分の必要な地図XMLについてダウンロードする方法をメモしました。
ファイルリストの作成方法などいろいろ工夫するともっと簡単にできるかもしれませんね。

# 参考
* G空間情報センター https://front.geospatial.jp/
* G空間情報センターAPI利用マニュアル　https://front.geospatial.jp/wp-content/uploads/2022/03/gic-api.pdf
* 地図データのＧ空間情報センターを介した一般公開について（法務省 2023-08-31）　https://www.moj.go.jp/MINJI/minji05_00494.html