8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python GoogleMapsAPIで逆ジオコーディングを日本語で出す

Last updated at Posted at 2019-11-28

始まりは「緯度・経度」から

たまたまだが、仕事でデータ処理チームのExcelのVBAを色々と直しているうちに、「motciniさん、VBAでAPIって使ったことありますか?」と聞かれた。
「え、使ったことないですね。どうしましたか」
「VBAで、緯度・経度から住所を調べるGoogle MapのAPIを使ってるんですが、なかなかうまくいかなくて…」
「ほう」
ということでコード画面を見せてもらったところ
(さっぱりわからん)
というのが正直な感想だった。
画像ダウンロードのサンプルプログラムでちょっとflickrのAPIをチュートリアルに沿って使ったことがあるだけで、そもそも業務でAPIとか使わなかったんですよね。
「因みにそのデータはどのくらい処理するんですか」
「8万行です」
Oh...そりゃ確かにAPIとかそういう機能も使いたくなるだろうな(この時APIという言葉はふわっとしかわからなくて、雰囲気で言っていた感はあります)
でも、個人的に正直Pythonとかで処理しちゃった方が楽だなと思ったので、
「とりあえず、Pythonで何かできないか調べてみます」
ってことでまずはGoogleMapsAPIというものについて調べることにした。

Geocodingの記事は見飽きた

ということで早速ググってみるわけだけど、どうやら「緯度・経度」から住所を探知するのは「逆ジオコーティング(Reverse-Geocoding)」ということがわかった。
物件名や名称から住所、緯度・経度を探すのは普通の「ジオコーディング」らしい。
しかし困ったことに、この「逆ジオコーディング」でヒットする記事は少なく、求めていたコードは中々見当たらなかった。
5回くらい検索ワードを変えるころには正規のジオコーディングの記事は見飽きていた。
さらに、逆ジオコーディングのそれっぽいコードが乗っていたとして、得られる住所は英語表記、つまり番地→都道府県という形で、アルファベットで表記されてしまうことがネックだった。
例えば「東京タワー」で調べたら、
・〒105-0011 東京都港区芝公園4丁目2−8
と表示されるのではなく、
・4-2-8, Shibakoen, Minato-ku, Tokyo
みたいな感じで表記されてしまう。
これでは住所を次に読む人が困ってしまうので、なんとか日本語表記にする方法を探した。
そして見つかった

以下、コードを載せるので参考になれば幸いである。
参考にしたわかりやすい解説(Pythonでジオコーディング(Geocoder/Googlemaps))

逆ジオコーディング(緯度・経度)から住所を日本語で探す

import googlemaps

#GoogleMapsAPI用に取得したAPIキーを変数に格納する
Key = XXXXX

#GoogleMapsAPI用にAPIキーを返す
gmaps = googlemaps.Client(key=Key)

#リストにいくつか緯度・経度を格納する
list = [
    "35.65858645, 139.745440057962", #東京タワー
    "35.71005425, 139.810714099926" #東京スカイツリー
]

#リストの中から順番に住所を探していく
for i in list:
    results = gmaps.reverse_geocode((i), language='ja')
    add = [d.get('formatted_address') for d in results]
    print(add[1])

#=>日本、〒105-0011 東京都港区芝公園4丁目2−8
#=>日本、〒131-0045 東京都墨田区押上1丁目1−83

問題はこのままだと、文頭に「日本、」という若干余計な文字が入っていること。
これをスライスで途中から記載するできるようにちょっとコードを改変する。

for i in list:
    results = gmaps.reverse_geocode((i), language='ja')
    add = [d.get('formatted_address') for d in results]
    Jusho = add[1]
    print(Jusho[3:])

#=>〒105-0011 東京都港区芝公園4丁目2−8
#=>〒131-0045 東京都墨田区押上1丁目1−83

うん、素晴らしい出来栄えだ。求めていた形そのものである。
ただ、問題はGoogleMapsAPIがどうやら月に無料でアクセス可能なAPIの件数が40,000件までということらしい(参照元
まぁそれを超えるヘビーユーザーは中々いないかもしれないが、それを超えると料金が請求されてしまうので頭に入れておこう。

8
8
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
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?