はじめに
アニメ聖地領域を抽出するために、GoodClues_DBのカラムに無い市区町村名の情報が必要でした。そこで、農研機構の簡易逆ジオコーディングサービスを使って市区町村名を取得しました。アニメ聖地領域抽出のステップ1です。
アニメ聖地領域抽出の流れ
ジオコーディングとは
各種情報に対して、関連する地理座標(典型的には緯度・経度)を付加すること。 付加された地理座標のことをジオコードと称する。
ジオコーディング - Wikipedia
逆ジオコーディングとは
地理座標から住所を取得することとします。*3
逆ジオコーディングサービス
逆ジオコーディングサービスを提供している所はいくつかあるのですが、下記記事を参考に農研機構の簡易逆ジオコーディングサービスを利用させていただくことにしました。農研機構さん素敵なサービスをありがとうございます。
緯度経度から住所を取得してリスト化したい【逆ジオコーディング】
無料 逆ジオコーディング 使用制限数が多い 二次利用 国土交通省 ○ ○ – ○ 農研機構 ○ ○ ○ ○ Yahoo ○ ○ ○ × ○ ○ × ×
市区町村名の取得ソースコード
#GoodClues_DBより緯度経度を取得し、農研機構サービスにて逆ジオコーディングを行う。 #緯度経度から住所取得に失敗した場合は、失敗したレコードIDを出力する。 import requests import json import csv import codecs #Open csv file csv_file = open('seichi.csv','r',encoding = 'utf-8') f = csv.DictReader(csv_file,delimiter=",",doublequote=True,lineterminator="\r\n", quotechar='"', skipinitialspace=True) csv_out_file = open('seichi_t.csv','w',encoding = 'utf-8') for row in f: #Reverse geocoding lat = row['緯度'] lon = row['経度'] url = 'https://www.finds.jp/ws/rgeocode.php?json&lat='+lat+'&lon='+lon response = requests.get(url) json_resp = json.loads(response.text) #print (json_resp['result']['municipality']['mname']) #print (json_resp) #Write csv file try: csv_out_file.write(json_resp['result']['municipality']['mname']+"\n") except KeyError as err_message: print (err_message) print (row['ID']) csv_out_file.write(row['ID']+"error \n") #look at https://www.finds.jp/rgeocode/index.html.ja csv_file.close() csv_out_file.close()
プログラミング言語:Python 3.5.3
GoodClues_DBの一部
ID,タイトル,コード,場所,県名,住所,緯度,経度 1,けいおん,241215,豊郷小学校,滋賀,滋賀県犬上郡豊郷町石畑518,35.203373,136.232871 2,けいおん,241215,四条Mojo,京都,京都府京都市下京区四条新町月鉾町39-1四条烏丸大西ビル,35.003973,135.756867
出力結果の一部
犬上郡 豊郷町 京都市 下京区
つまづいたところ
逆ジオコーディングという言葉を知らなかった。
当初は「google api 住所取得」という単語から検索していました。そうすると、「逆ジオコーディング」という単語が出現せず、有用な情報に全くアクセスできませんでした。そして、Google APIは2次利用禁止されているだけでなく、逆ジオコーディングで取得できる情報も私にとって不十分でした。市区町村名がリターンjsonの決まった要素に入っていない。。(所要時間:1時間)
文字コードの意識が必要
日本語を扱うので、文字コードの意識が常に必要でした。英語圏が羨ましい。(所要時間:XX)
Python 2と3で実装コードが異なる
Pythonに関する情報はWeb上に多いのですが、Python 2と3は完全互換していないため、その記事が2か3のどちらか確認して、適宜利用する必要がありました。csvをエンコーディングして読み込む方法がpython3しかわからなかったです。(所要時間:30分)
おわりに
農研機構の簡易逆ジオコーディングサービスを使って、市区町村名を取得した流れをまとめました。いらんところに時間も使っており、もう少しさっとできれば良かったなぁと思っている次第です。Python完全に理解した。
【エンジニア用語解説】
— 伊藤 祐策(パソコンの大先生) (@ito_yusaku) 2018年9月20日
「完全に理解した」
製品を利用をするためのチュートリアルを完了できたという意味。
「なにもわからない」
製品が本質的に抱える問題に直面するほど熟知が進んだという意味。
「チョットデキル」
同じ製品を自分でも1から作れるという意味。または開発者本人。
*1:https://www.finds.jp/rgeocode/index.html.ja
*2:アニメ聖地箇所ごとに登録されている
*3:ジオコーディングの定義からすると建物名や郵便番号などの取得も含まれると思います。