Google Maps API 使ってみた

こんにちは!Onplanetzです。

今日は、地図情報を取得するのにとても便利なGoogle Maps APIを使ってみたので、そのことについて書きたいと思います。

 

今回使用したのは、Google Maps APIの中でも、住所を与えると緯度・経度を返してくれるGeocoding APIと、緯度・経度を与えたときに周辺にどんな施設があるか調べることができる、Places APIです。今回はcolab上で住所をAPIに渡して、json形式で受け取った周辺情報をcsvにまとめてみました。

 

使い方はこんな感じです。

  1. Google Cloud Platformで新規プロジェクトを作成し、API keyを作成する。
  2. Google ColabolatoryでAPIを呼び出すためのコードを書く。

 

すごくシンプルですね!コードは下に載せますが、これを使用すると、例えば周辺の半径500m以内のドラッグストアからガソリンスタンド、交番や駅などに加えて、テーマパークから水族館、さらにはカジノまで、約100個ものカテゴリの施設を検索することができます。(詳細のカテゴリについては公式ドキュメントに記載されています。)

 

以下に東京の幾つかの地点から、近隣の駅名(半径1km)と、最寄りのスーパー/コンビニまでの距離を出力するコードを載せておきたいと思います。

(ちなみに、ColaboratoryはGoogle Driveから、右クリックでその他->アプリを追加->Colaboratoryと検索すると、Google Drive上で使えるようになります。新しいファイルをつくるには、新規のファイル作成でColaboratoryを選択してください。)

 

以下にコードのサンプルを載せておきます。実際に使ってみたい方は、こちらからipynb形式のファイルをダウンロードして実行することが出来ます。

 

#Google Maps APIをColab上にインストール
!pip install googlemaps
 
#colab上に必要なcsvファイルをアップロード・保存する準備
from google.colab import drive
drive.mount('/content/drive')
 
#現在のディレクトリへ移動
import os
os.chdir('/content/drive/My Drive/ブログ記事')
 
#必要なモジュールのインポート
import re
import pandas as pd
import googlemaps
import pprint # list型やdict型を見やすくprintするライブラリ
 
#dataframeを作成
places = ['東京都庁''明治神宮''ビッグサイト''上野動物園''国会図書館']
addresses = ['東京都新宿区西新宿二丁目8番1号''東京都渋谷区代々木神園町1−1''東京都江東区有明3丁目11−1''東京都台東区上野公園9-83''東京都千代田区永田町1-10-1']
df = pd.DataFrame()
df['名称'] = places
df['住所'] = addresses
 
#dataframeの確認
df.head()
 
#実際にGoogle Maps APIを使う部分
key = '---' #作成したAPIキーを入れる
client = googlemaps.Client(key) #インスタンス生成

station_name = 
supermarket_convenience_dist = 
for address in addresses:
    geocode_result = client.geocode(address) # 位置情報を検索
    try:
        loc = geocode_result[0]['geometry']['location'# 経度・緯度の情報のみ取り出す #locはlocationのこと
        train_result = client.places_nearby(location=loc, radius=1000type='train_station'#半径1000m以内の駅情報を取得 #radiusが半径
        subway_result = client.places_nearby(location=loc, radius=1000type='subway_station'#地下鉄駅
        light_rail_result = client.places_nearby(location=loc, radius=1000type='light_rail_station'#路面電車
        supermarket_result = client.places_nearby(location=loc, radius=1000type='supermarket'#スーパー
        convenience_store_result = client.places_nearby(location=loc, radius=1000type='convenience_store'#コンビニ

        target_lat = loc['lat'#取得した緯度
        target_lng = loc['lng'#経度

        station_result = 
        for result in [train_result, subway_result, light_rail_result]:
            for station in result['results']:
                station_result.append(station['name'])
        station_name.append(station_result)

        distance_set = 
        for result in [supermarket_result, convenience_store_result]:
            for info in result['results']:
                location = info['geometry']['location'#スーパー/コンビニの緯度・経度
                lattitude = location['lat']
                longitude = location['lng']
                distance = ((target_lat - lattitude)**2 + (target_lng - longitude)**2)**(1/2)
                distance_set.append(distance)
    
        min_dist = sorted(distance_set)[0]*110.94297 #110.94297は緯度1度あたりの距離(km)
        supermarket_convenience_dist.append(min_dist)   
       
    except Exception as e:
        station_name.append(-1#うまくいかなかったときは-1を入れておく
        supermarket_convenience_dist.append(-1)
        print(address, geocode_result)
        print(e)
#dataframeにGoogle Maps APIから取ってきた情報をカラムとして追加
df['近隣駅名'] = station_name
df['スーパー・コンビニ距離(km)'] = supermarket_convenience_dist
 
#dataframeで結果を出力
df.head()
 
#指定のディレクトリに結果をcsv形式で保存
df.to_csv('result_google_api.csv')
 

Google Maps APIは簡単でとても使いやすくて便利なので、ぜひ使用してみてください。