スポンサーリンク

【Python】「Google Map API」を利用して2点間のルート情報をJson形式で取得する方法。

Python
スポンサーリンク

今回の記事は「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キー取得設定

google cloud 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の他記事も書いておりますのでご参照ください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Python
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました