PythonでGoogle Distance Matrix APIを使って2地点間の距離と所要時間を計算する方法
私たちの多くは、出発地から目的地までの距離や移動時間を確認する際に、Googleマップを利用しています。実は開発者向けに、Googleは「Google Distance Matrix API」というサービスを提供しており、これを使えばプログラムから2地点間の距離と所要時間を簡単に計算することができます。
このAPIを利用するには、Google MapsのAPIキーが必要です。以下のリンクから無料で取得できます。
https://developers.google.com/maps/documentation/distance-matrix/get-api-key
必要なライブラリ
この機能は、複数のPythonライブラリを使って実現できます。主なものは以下の通りです。
- Pandas
- googlemaps
- Requests
- Json
本記事では、最も基本的な「requests」と「json」ライブラリを使用した方法をご紹介します。Pandasを使えば、複数の出発地・目的地を一度に処理し、結果をCSVファイルに出力することも可能です。
以下がその実装プログラムです。
# 必要なライブラリをインポート
import requests
import json
# 出発地と目的地の都市名を入力
originPoint = input("出発地の都市名を入力してください: ")
destinationPoint = input("目的地の都市名を入力してください: ")
# Google MapsのAPIキーを変数に格納
apiKey = 'YOUR_API_KEY'
# Google Maps APIのURLを変数に格納
url = 'https://maps.googleapis.com/maps/api/distancematrix/json?'
# requestsモジュールのgetメソッドを呼び出し、レスポンスオブジェクトを保存
r = requests.get(url + 'origins=' + originPoint + '&destinations=' + destinationPoint + '&key=' + apiKey)
# レスポンスオブジェクトからJSON形式の結果を取得
res = r.json()
# 結果を出力
print(res)実行結果
上記のプログラムを実行すると、以下のような出力が得られます。
出発地の都市名を入力してください: Delhi
目的地の都市名を入力してください: Karnataka
{'destination_addresses': ['Karnataka, India'], 'origin_addresses': ['Delhi, India'], 'rows': [{'elements': [{'distance': {'text': '1,942 km', 'value': 1941907}, 'duration': {'text': '1 day 9 hours', 'value': 120420}, 'status': 'OK'}]}], 'status': 'OK'}この例では、インドのデリー(Delhi)からカルナータカ州(Karnataka)までの距離が約1,942km、所要時間が1日9時間という結果がJSON形式で返されています。「distance」の「value」はメートル単位、「duration」の「value」は秒単位の数値なので、プログラム内で計算に利用する際にも便利です。
-
Pythonで空席から最も近い占有席までの最大距離を求めるプログラム
0と1のみで構成されたリストseatsがあるとします。seats[i]は座席を表しており、値が1ならその座席は使用中(占有)、0なら空席を意味します。ここで、少なくとも1つの空席と1つの占有席が必ず存在するとき、ある空席から最も近い占有席までの距離の最大値を求める問題を考えます。 問題の例 例えば、入力が seats = [1, 0, 1, 0, 0, 0, 1] の場合、出力は 2 となります。これは、空席である seats[4] に座ると、左右どちらの占有席とも距離が2になり、これが最大となるためです。 解決のための手順 この問題は、リストを一度走査するだけで解くことができます。手順は以下
-
PythonのMatplotlibで曲線とX軸の間の領域を塗りつぶす方法
PythonのMatplotlibを使って、曲線とX軸の間の領域を塗りつぶす方法を解説します。データの可視化において、曲線の下側の領域を色で強調することは、グラフの視認性を高めるために非常に有効です。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x および y のデータポイントを作成します。plot() メソッドを使って、x と y のデータポイントをプロットします。fill_between() メソッドを使用して、曲線とX軸の間の領域を塗りつぶします。show() メソッドを呼び出して、図を表示します。コード例import matpl