LoginSignup
1
0

〇〇県の登記所備付地図データをまとめてダウンロードする

Posted at

はじめに

G空間情報センターで公開されている登記所備付地図データ(XML形式)は、法務局・出張所単位でファイルが分かれており、都道府県単位でまとめてダウンロードするのはブラウザから手作業で実行するのは大変です。

G空間情報センターでは CKAN API を使って検索やダウンロードすることが出来ます。そこでコマンドラインを使って複数データをまとめて検索・ダウンロードする方法を説明します。

動作環境

ここでは curl、jq、xargsそしてbasenameといったコマンドを使用します。また動作確認は macOSにて行っています。

Windowsでは PowerShellで実行される curlはいわゆる curlとは別物です。実際には curl.exeコマンドを使用する必要があります。

タグを使ってデータセットを検索する

まずはブラウザでデータセットを開いてみます。

リソースのファイルが並んでいる下に、四角で囲まれた文字列が タグ です。

image.png

タグを使って検索する場合は、検索する文字列を前に tags: を入れます。複数のタグを並べるときは半角スペースと AND で並べます。
image.png

CKAN APIで検索する

ブラウザで下記のURLを開くと CKAN APIを呼び出すことが出来ます。

https://www.geospatial.jp/ckan/api/3/action/package_search?q=tags:地図情報 AND tags:法務省 AND tags:福島県

実際には日本語で入力した部分や半角スペースは「URLエンコード」されて下記の様な文字列になります。FirefoxやChromeなどのブラウザではURLフィールドに日本語が入っていても、コピーするとURLエンコードされた文字列を取り出すことが出来ます。

tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20tags:%E7%A6%8F%E5%B3%B6%E7%9C%8C

レスポンスはJSON形式で返ってきます。FirefoxではJSON形式を整形して表示してくれるので便利です。

image.png

count要素を見ると 62個のデータセットがあることが分かります。また一つ目のデータセットには num_resources要素を見ると3つリソースがあることが分かります。

curlコマンドで検索する

上記のURLをcurlコマンドで開いてみます。返り値のJSONデータは jqコマンドにパイプライで繋いで整形し、要素を指定することで値を抽出します。-sオプションは進行状況の表示をオフにします。

jq '.result.count'とするとcount要素の値を取り出すことが出来ます。

% curl -s 'https://www.geospatial.jp/ckan/api/3/action/package_search?q=tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E7%A6%8F%E5%B3%B6%E7%9C%8C' | jq '.result.count'
62

jq '.result.results[0].num_resources'とすると一つ目のデータセットのnum_resources要素の値を取り出すことが出来ます。

% curl -s 'https://www.geospatial.jp/ckan/api/3/action/package_search?q=tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E7%A6%8F%E5%B3%B6%E7%9C%8C' | jq '.result.results[0].num_resources'
3

リソースのURLをcurlコマンドで取り出す

登記所備付地図XMLデータの各データセットには

  1. 利用規約(PDF)
  2. 2022年度データ(zip)
  3. 2023年度データ(zip)

の3つのリソースが含まれています。ここでは話を簡単にするために データセットには同じ順番でリソースが登録されていることを仮定 します。その場合、2023年度の3つ目のリソースのURLを抽出するには jq '.result.results[].resources[2].url' とすればOKです。

% curl -s 'https://www.geospatial.jp/ckan/api/3/action/package_search?q=tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E7%A6%8F%E5%B3%B6%E7%9C%8C&rows=20' | jq '.result.results[].resources[2].url'
"https://www.geospatial.jp/ckan/dataset/79ef9787-986d-4183-938c-a297cd7db2ad/resource/dff05501-7982-4b82-bd0b-77bafd15aa88/download/07201-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/6c8d2c98-c2dc-4342-b89c-c325ef5bdbf4/resource/68eed9e9-d37b-442b-a89c-1173fb4f7e8d/download/07202-3804-2023.zip"
"https://www.geospatial.jp/ckan/dataset/2ca7f3c8-b701-4417-8de3-c8deb5db1c9b/resource/87466cde-86f2-4a26-9383-2ce1445d9cb7/download/07203-3802-2023.zip"
"https://www.geospatial.jp/ckan/dataset/66f6fe58-b66d-4787-b051-57c32a26c622/resource/e4f3594a-b70c-457a-ba40-99893eac18ea/download/07204-3805-2023.zip"
"https://www.geospatial.jp/ckan/dataset/d574da71-107f-4f78-91f5-69410800892d/resource/4eaf933d-d373-4da0-8ead-8108fcc9fa96/download/07205-3803-2023.zip"
"https://www.geospatial.jp/ckan/dataset/57fb55cb-c825-46c2-846c-252953fc991c/resource/76ee595e-426d-49e2-9b86-3e77d6e5a018/download/07207-3802-2023.zip"
"https://www.geospatial.jp/ckan/dataset/9a43cb63-8566-4255-976e-1f6bd8c52ff7/resource/5a92e0c0-ab2a-460e-94cc-f8eaa285faee/download/07208-3804-2023.zip"
"https://www.geospatial.jp/ckan/dataset/18801ba6-519d-4a6f-b5d5-c10b45e8d8f4/resource/d6ac4899-33c5-4f0e-9c57-8881b071df2b/download/07209-3801-2023.zip"
"https://www.geospatial.jp/ckan/dataset/5818f711-4d68-48d2-a386-bafb304eddb3/resource/e21139a5-d089-41a8-a6b1-d45e95aa81ab/download/07210-3808-2023.zip"
"https://www.geospatial.jp/ckan/dataset/7a30cbb3-9667-4dc3-81fe-80d43d1aed48/resource/c79f7c98-dee1-42e2-9f76-304d19714270/download/07211-3802-2023.zip"
"https://www.geospatial.jp/ckan/dataset/c0449654-e2e2-4933-808c-2122f8cd6ad1/resource/c353cab1-45dd-4539-810f-3208340ff7a2/download/07212-3801-2023.zip"
"https://www.geospatial.jp/ckan/dataset/d051b1f4-e80a-490b-8ab7-5f818fd8d4b1/resource/c57895ca-ab71-4535-b70e-74f678ea76d7/download/07213-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/1f431bf9-9564-49a7-87ab-bbbe874a5ab9/resource/b2d91e85-4ba8-4a5c-af2c-48c2a0f00d41/download/07214-3808-2023.zip"
"https://www.geospatial.jp/ckan/dataset/75d805be-4b82-4d4f-b42a-3c1f73ae539a/resource/ec137fdc-a9ff-448c-aacb-2cab244d2509/download/07301-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/e952640c-3916-47a9-a483-6a8ff434f68e/resource/3fc22496-de67-4bd5-a6e1-debe724b2926/download/07303-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/26154123-7222-42a1-89f1-1bc9c96ef2fe/resource/218f5055-6cd9-4fce-821a-7074cffc6ca3/download/07308-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/3d063402-6cd5-4cc7-9d35-3abd21db190e/resource/f1725568-ec95-4d3c-b041-d41e7ae9457b/download/07309-3800-2023.zip"
null
"https://www.geospatial.jp/ckan/dataset/dc2e0f0b-3e17-4067-b2f2-59edc380158b/resource/ad95248c-7a0a-47aa-9173-48652ce4346a/download/07322-3808-2023.zip"
"https://www.geospatial.jp/ckan/dataset/c491c526-0e68-4672-807c-6d525784c11d/resource/e934b9c3-74c9-4559-90e8-8dba4cec4a44/download/07342-3802-2023.zip"

ここではCKAN APIを呼び出すパラメータで &rows=20を追加して、検索結果を20件まで返すように指定しています。

さて、18行目が null になっています。安達郡安達町(福島地方法務局二本松出張所)のデータセットは2022年度のリソースは存在していますが、2023年度は他の出張所にまとめられてしまったためかリソースが存在しません。

curlコマンドで if文を使う

num_resources要素が 3以上の場合だけURLを取り出し、それ以外は空の値(empty)にする場合はjq '.result.results[] | if .num_resources >= 3 then .resources[2].url else empty end'と書きます。

% curl -s 'https://www.geospatial.jp/ckan/api/3/action/package_search?q=tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E7%A6%8F%E5%B3%B6%E7%9C%8C&rows=20' | jq '.result.results[] | if .num_resources ==3 then .resources[2].url else empty end'
"https://www.geospatial.jp/ckan/dataset/79ef9787-986d-4183-938c-a297cd7db2ad/resource/dff05501-7982-4b82-bd0b-77bafd15aa88/download/07201-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/6c8d2c98-c2dc-4342-b89c-c325ef5bdbf4/resource/68eed9e9-d37b-442b-a89c-1173fb4f7e8d/download/07202-3804-2023.zip"
"https://www.geospatial.jp/ckan/dataset/2ca7f3c8-b701-4417-8de3-c8deb5db1c9b/resource/87466cde-86f2-4a26-9383-2ce1445d9cb7/download/07203-3802-2023.zip"
"https://www.geospatial.jp/ckan/dataset/66f6fe58-b66d-4787-b051-57c32a26c622/resource/e4f3594a-b70c-457a-ba40-99893eac18ea/download/07204-3805-2023.zip"
"https://www.geospatial.jp/ckan/dataset/d574da71-107f-4f78-91f5-69410800892d/resource/4eaf933d-d373-4da0-8ead-8108fcc9fa96/download/07205-3803-2023.zip"
"https://www.geospatial.jp/ckan/dataset/57fb55cb-c825-46c2-846c-252953fc991c/resource/76ee595e-426d-49e2-9b86-3e77d6e5a018/download/07207-3802-2023.zip"
"https://www.geospatial.jp/ckan/dataset/9a43cb63-8566-4255-976e-1f6bd8c52ff7/resource/5a92e0c0-ab2a-460e-94cc-f8eaa285faee/download/07208-3804-2023.zip"
"https://www.geospatial.jp/ckan/dataset/18801ba6-519d-4a6f-b5d5-c10b45e8d8f4/resource/d6ac4899-33c5-4f0e-9c57-8881b071df2b/download/07209-3801-2023.zip"
"https://www.geospatial.jp/ckan/dataset/5818f711-4d68-48d2-a386-bafb304eddb3/resource/e21139a5-d089-41a8-a6b1-d45e95aa81ab/download/07210-3808-2023.zip"
"https://www.geospatial.jp/ckan/dataset/7a30cbb3-9667-4dc3-81fe-80d43d1aed48/resource/c79f7c98-dee1-42e2-9f76-304d19714270/download/07211-3802-2023.zip"
"https://www.geospatial.jp/ckan/dataset/c0449654-e2e2-4933-808c-2122f8cd6ad1/resource/c353cab1-45dd-4539-810f-3208340ff7a2/download/07212-3801-2023.zip"
"https://www.geospatial.jp/ckan/dataset/d051b1f4-e80a-490b-8ab7-5f818fd8d4b1/resource/c57895ca-ab71-4535-b70e-74f678ea76d7/download/07213-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/1f431bf9-9564-49a7-87ab-bbbe874a5ab9/resource/b2d91e85-4ba8-4a5c-af2c-48c2a0f00d41/download/07214-3808-2023.zip"
"https://www.geospatial.jp/ckan/dataset/75d805be-4b82-4d4f-b42a-3c1f73ae539a/resource/ec137fdc-a9ff-448c-aacb-2cab244d2509/download/07301-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/e952640c-3916-47a9-a483-6a8ff434f68e/resource/3fc22496-de67-4bd5-a6e1-debe724b2926/download/07303-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/26154123-7222-42a1-89f1-1bc9c96ef2fe/resource/218f5055-6cd9-4fce-821a-7074cffc6ca3/download/07308-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/3d063402-6cd5-4cc7-9d35-3abd21db190e/resource/f1725568-ec95-4d3c-b041-d41e7ae9457b/download/07309-3800-2023.zip"
"https://www.geospatial.jp/ckan/dataset/dc2e0f0b-3e17-4067-b2f2-59edc380158b/resource/ad95248c-7a0a-47aa-9173-48652ce4346a/download/07322-3808-2023.zip"
"https://www.geospatial.jp/ckan/dataset/c491c526-0e68-4672-807c-6d525784c11d/resource/e934b9c3-74c9-4559-90e8-8dba4cec4a44/download/07342-3802-2023.zip"

null の行が取り除かれて19件のURLが取り出せました。

URLからリソースをダウンロードする

登記所備付地図をダウンロードする場合には CKAN APIキーを付加することが 推奨 されます。G空間情報センターにログインした後、ダッシュボードのページを開くとAPI Keyが表示されていますので、この文字列を利用します。

curlコマンドでは -Hオプションで X-CKAN-API-KEY: を追加します。ここでは環境変数 GEOSPATIAL_CKAN_API_KEY に値を設定して利用しています。

前述の処理で19件のURLが取り出せたので、パイプラインでxargsコマンドにデータを渡します。xargs -n 1で一行ずつURLを処理します。

CKANからダウンロードするときには curlに -Lオプションを付けてリダイレクトを指定します。また -oオプションを付けて保存先のファイル名を指定します。

basenameコマンドはURL文字列から一番後ろのファイル名の部分を取り出しています。

curl -s 'https://www.geospatial.jp/ckan/api/3/action/package_search?q=tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E7%A6%8F%E5%B3%B6%E7%9C%8C&rows=20' | xargs -n 1 sh -c 'xargs -n 1 sh -c 'curl -L $0 -o $(basename $0) -H X-CKAN-API-KEY: $GEOSPATIAL_CKAN_API_KEY'

上記のスクリプトを実行すると19個のzipファイルがダウンロードされます。

おまけ

コマンドラインで日本語の文字列などをURLエンコードする時に jqコマンド を利用することができます。

% echo '地図情報' | jq -Rr '@uri'
%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1

% echo '法務省' | jq -Rr '@uri'
%E6%B3%95%E5%8B%99%E7%9C%81

% echo '福島県' | jq -Rr '@uri'
%E7%A6%8F%E5%B3%B6%E7%9C%8C

関連ページ

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