今回の記事は「Google Map API」を利用してWebアプリなどに指定した2点間のルート情報をJson形式で取得する方法を記載します。ではまずは環境構築を行っていきます。
環境紹介
今回の Python環境などについてご紹介します。私の場合はdocker上に環境を構築していますローカルに Python環境を構築しても特に差はないようなので環境構築に関しては下記 PythonをインストールするのみでOKです。
Python:3.6.11
ちなみにdocker上で Pythonの環境を構築しjupyter notebookなどを開く方法に関しては下記の記事に記載しておりますので気になる方はご参照ください。
docker上で Python + jupyter notebookの環境を構築する方法
「Google Map API」側のアカウント登録とAPIキー取得設定
アカウント作成の段階で写真を撮っておけばよかったのですがとりあえずページに入ってアカウント作成の表示があるはず下記ページまで進めればOKです。

「APIとサービス」をクリックすると「ダッシュボード」を開けるのでそちらを開きます。
初期状態では何も上記写真の赤丸の部分にグループが入っていない可能性があります。その場合は下記手順によってグループを作成します。
作成したプロジェクトを選択すれば画面が下記画面に遷移します。

今回はMaps JavaScript APIを使用しますのでこのAPIをクリック。下記にページ繊維します。
有効にしてください。下記にページに遷移します。
きちんとAPIの名称が正しいかを確認後、サイドバーの認証情報をクリックしてください。下記にページ遷移。

赤丸をつけ忘れてしまったのですが色の変わっている「APIとサービスの認証情報」をクリック。すると下記のページがこのページ上に表示されます。
以上でAPIの取得完了です。このAPIキーはコピーしておきます。
「Google Map API」を利用して2点間のルート情報をJson形式で取得するPythonコード
まずは必要なライブラリの「pip install」を行いましょう。
pip install urllib json
ではメインの Pythonコードをご紹介です。
import urllib.request, json
import urllib.parse
import datetime
#Google Maps Platform Directions API endpoint
endpoint = 'https://maps.googleapis.com/maps/api/directions/json?'
api_key = '[自身のAPIキー]'
#出発地、目的地を入力
origin = input('出発地を入力: ').replace(' ','+')
destination = input('目的地を入力: ').replace(' ','+')
#UNIX時間の算出
dep_time = input('出発時間を入力: yyyy/mm/dd hh:mm 形式 ')
dtime = datetime.datetime.strptime(dep_time, '%Y/%m/%d %H:%M')
unix_time = int(dtime.timestamp())
#移動手段決定
travel_mode_flag = input('移動手段: 1:walk,2:train').replace(' ','+')
global travel_mode
if travel_mode_flag == "1":
travel_mode = "walking"
elif travel_mode_flag == "2":
travel_mode = "transit"
else:
print("error")
print("移動手段")
print(travel_mode)
nav_request = 'language=ja&origin={}&destination={}&mode={}&departure_time={}&key={}'.format(origin,destination,travel_mode,unix_time,api_key)
nav_request = urllib.parse.quote_plus(nav_request, safe='=&')
request = endpoint + nav_request
#Google Maps Platform Directions APIを実行
response = urllib.request.urlopen(request).read()
directions = json.loads(response)
for key in directions['routes']:
print("############")
for key2 in key['legs']:
print(key2['distance']['text'])
if travel_mode_flag == "1":
print(key2['duration']['text'])
elif travel_mode_flag == "2":
print(key2['duration_in_traffic']['text'])
root@113d1c31e3ee:/# python rute.py
出発地を入力: 東京
目的地を入力: 京都
出発時間を入力: yyyy/mm/dd hh:mm 形式 2020/10/20 10:10
移動手段: 1:walk,2:train1
移動手段
walking
############
474 km
4日 4時間
root@113d1c31e3ee:/#
解説としては出発地、目的、時間とをはじめに入力。「travel_mode」に関しては数字を入力することで徒歩と電車のみ選択可能にしております。
ただ、電車の「travel_mode」である「”transit”」は日本ではなぜか使用できないようです。そのため「travel_mode」がデフォルトの車移動「driveing」に変わってしまいます。よって、出力の際のjsonの読み方が下あたりの「if」文で微妙に分岐を行なっております。
jsonの読み込み方法に関しては他にもオプションが多々あるようです。その際は「nav_request」のURLにどんどんオプションを追加していく形でオプション指定をおこなっていきます。
今回の記事は以上です。同じような内容ですが Pythonの他記事も書いておりますのでご参照ください。
コメント