さて、今日は国土数値情報のWeb APIを使ってデータをダウンロードしてみようと思います。
国土数値情報のAPIとは?
GISを日頃使っている方は国土数値情報に関してはすでにご存じかと思いますが、実は国土数値情報のWEB APIというものがあります。色々なデータをダウンロードする場合、何度もダウンロード作業をする必要があったり、アンケートに答える必要があったりで、正直面倒くさいなと思った方もいるのではないかと思います。そんな時の救世主がこのAPIですまた、この!APIを利用することで、国土数値情報を組み込んだWebサイトや アプリケーションの開発を行うことが可能になります。
API仕様
http://nlftp.mlit.go.jp/ksj/api/specification_api_ksj.pdfに仕様の詳細が記載されていますので、興味のある方はぜひ読んでみてください。
ざっくり言うと以下二つの情報を取得することができます。
①国土数値情報の概要情報取得
②国土数値情報取得のURL情報取得
これだけだとよくわからないですね。。要するに・・・
①は国土数値情報では「海岸線」「ダム」などの情報を提供しているという概要的な情報を取得することができます。
②は「海岸線」などの各データの詳細情報を取得することができます。
各々の結果はXMLで取得でき、このようになります。
①国土数値情報の概要情報
②国土数値情報取得のURL情報
今回は「②国土数値情報取得のURL情報」を使用して、ファイルをダウンロードしようと思います。
環境
Python2.7.3
Windows10
サンプルコード
「国土数値情報 海岸線データ」をダウンロードするサンプルコードです。
# -*- coding: utf-8 -*- import zipfile import os.path import requests from lxml import etree class WebAPI(object): def __init__(self): self.appId = "ksjapibeta1" #固定 self.lang = "J" #固定 self.dataformat = 1 #固定 self.identifier = "C23" #各データ固有の番号 self.prefCode = "1-47" #都道府県 self.fiscalyear = 2006 #年度 self.dir = ur"D:\gis-py\WebAPI" #データ保存先 def get_url(self): """ 国土数値情報のWEBAPIを使用して各情報をXMLで取得します。 """ url = "http://nlftp.mlit.go.jp/ksj/api/1.0b/index.php/app/getKSJURL.xml" \ "?appId=%s&lang=%s&dataformat=%s&identifier=%s&prefCode=%s&" \ "fiscalyear=%s" %(self.appId, self.lang, self.dataformat, \ self.identifier, self.prefCode, self.fiscalyear) resp = requests.get(url, timeout=10) tree = etree.fromstring(resp.content) for t in tree.iter(): if t.tag == "zipFileUrl": self.download_zip(t.text) def download_zip(self,text): """ 指定したURLからZIPをダウンロードします。 """ filename = text.split('/')[-1] r = requests.get(text, stream=True) with open(filename, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk: f.write(chunk) f.flush() self.uncompress_zip(filename) def uncompress_zip(self,filename): """ ZIP ファイルを指定したディレクトリに展開します。 """ zfile = zipfile.ZipFile(filename) zfile.extractall(self.dir) if __name__ == '__main__': w = WebAPI() w.get_url()
このようにファイルがダウンロードされました。
ファイルを読み込んだ結果です。
今回はデータの一部をダウンロードしてみましたが、全データをダウンロードして各データや年度ごとにフォルダ分けしてダウンロードファイルを格納する、みたいなプログラムも作ってみました。興味のある方は以下エントリーを読んでみてください。
www.gis-py.com