はじめに
観光地やビジネスの訪問先を訪れる際、Google Map を使用される方も多いと思いますが、複数の目的地を最適な順序で訪れるルートを手動で設定するのは時間と労力がかかります。
この問題を解決するために、Google Maps API を活用して、出発地から各目的地までの距離を自動で計算し、最も効率的なルートを生成するスクリプトを作成しましたので紹介します。
このスクリプトを利用することで、例えば、観光で複数の場所を効率良く回れます。
Google Maps API とは
Google Maps API は、開発者が地図データをウェブサイトやアプリケーションに組み込むことを可能にするプログラミングインターフェースです。この API を使用することで、地図の表示、地点間のルート計算、距離や所要時間の推定などができます。
主に以下の二つの API がルート最適化に役立ちます。
- Directions API:
特定の起点と終点を基に、複数の交通手段(自動車、公共交通機関、徒歩、自転車など)でのルートと旅行時間、距離を計算し、最適な道順と予想到着時間がわかります。
- Distance Matrix API:
複数の起点と終点間の距離や所要時間を計算でき、特に複数の目的地を効率的に訪れるための計画を立てる際に使えます。この API は、最短ルートだけでなく、交通状況を考慮した時間も提供するため、より正確な情報がわかります。
これらの API を利用することで、複雑な距離計算やルート最適化を簡単に実行でき、時間の節約だけでなく、移動効率も向上します。後述するスクリプトでは、Distance Matrix API を使用して、出発地から複数の目的地までの距離を効率的に計算し、最適な訪問順序を自動で生成します
Python を使った Google Map 使用例
以下は、Google Maps API を利用して、特定の出発地点から複数の目的地までの距離を効率的に計算し、それらを距離の短い順にソートする Python スクリプトです。Distance Matrix API を使用し、複数の目的地の距離と所要時間を一括で取得します。結果は距離に基づいてソートされ、最も効率的な訪問ルートを提供する Google Maps の URL を作成します。
import googlemaps
def main():
# API キーの設定
gmaps = googlemaps.Client(key='YOUR_API_KEY')
# 出発地点
start = '千葉県浦安市舞浜1-1'
# 目的地のリストをファイルから読み込む
with open('target.txt', 'r', encoding='utf-8') as file:
destinations = [line.strip() for line in file]
# Distance Matrix API を使用して距離と時間を取得
addresses = [destination.split(',')[0] for destination in destinations]
names = [destination.split(',')[1] for destination in destinations]
matrix_result = gmaps.distance_matrix(origins=[start], destinations=addresses, mode="walking")
# 結果から距離を抽出してソート
distances = []
for i, row in enumerate(matrix_result['rows'][0]['elements']):
distance = row['distance']['value']
destination = names[i]
distances.append[1]destination, distance sorted_destinations = sorted(distances, key=lambda x: x[1])
# 結果を表示し、Google Maps URL を作成
base_url = "https://www.google.co.jp/maps/dir/"
url = base_url + start.replace(' ', '+')
print("Sorted destinations and distances:")
for destination, distance in sorted_destinations:
print(f'{destination}: {distance} meters')
url += '/' + addresses[names.index(destination)].replace(' ', '+')
print("\nGoogle Maps Route URL:")
print(url)
if __name__ == "__main__":
main()
目的を記載する target.txt
は以下のように設定します。例として、東京ディズニーランド周辺の舞浜地区にある主要な観光スポットとその住所を記載しています。
千葉県 浦安市舞浜 1-1-24,ボン・ヴォヤージュ
千葉県 浦安市舞浜 1-4,イクスピアリ
千葉県 浦安市舞浜 29-1,ビビディ・バビディ・ブティック
千葉県 浦安市舞浜 1-13,東京ディズニーシー
千葉県 浦安市舞浜 1-4,シネマイクスピアリ
千葉県 浦安市舞浜 2-50,舞浜アンフィシアター
実行結果
スクリプトを実行した場合、以下のような出力が得られます。出発地点から各目的地までの距離が最短の順にソートされたもので、効率的な観光ルートを示しています。
PS C:\scripts> python .\maps_search.py
Sorted destinations and distances:
舞浜アンフィシアター: 472 meters
ビビディ・バビディ・ブティック: 1087 meters
ボン・ヴォヤージュ: 1219 meters
イクスピアリ: 1894 meters
シネマイクスピアリ: 1894 meters
東京ディズニーシー: 2907 meters
Google Maps Route URL:
https://www.google.co.jp/maps/dir/千葉県浦安市舞浜1-1/千葉県+浦安市舞浜+2-50/千葉県+浦安市舞浜+29-1/千葉県+浦安市舞浜+1-1-24/千葉県+浦安市舞浜+1-4/千葉県+浦安市舞浜+1-4/千葉県+浦安市舞浜+1-13
Google Maps の URL リンクをクリックすると、以下のように各観光スポットを効率的に巡るルートが地図上に表示されます。
Python スクリプトの解説
API キーの設定とクライアントの初期化:
gmaps = googlemaps.Client(key='YOUR_API_KEY')
この行で Google Maps API を使用するためのクライアントを初期化しています。YOUR_API_KEY には、Google Cloud Platform で取得した有効な API キーを指定します。
出発地点の設定:
start = '出発地点の住所'
ここで出発地点の住所を指定します。この住所はルート計算の起点となります。
目的地のリスト読み込み:
with open('target.txt', 'r', encoding='utf-8') as file:
destinations = [line.strip() for line in file]
target.txt
ファイルから目的地の住所を読み込みます。ファイルは各行に一つの目的地が記載されており、これらは後の API リクエストで使用されます。
Distance Matrix API の呼び出し:
matrix_result = gmaps.distance_matrix(origins=[start], destinations=destinations, mode="bicycling")
出発地点から各目的地までの距離と所要時間を計算するために Distance Matrix API を呼び出します。ここでは自転車モードを指定しており、交通手段に応じた結果が得られます。
距離データの抽出とソート:
distances = []
for i, row in enumerate(matrix_result['rows'][0]['elements']):
distance = row['distance']['value']
destination = destinations[i]
distances.append[2]destination, distance sorted_destinations = sorted(distances, key=lambda x: x[1])
API から得られた距離データをリストに格納し、そのリストを距離に基づいてソートします。これにより、最短の距離から順に目的地が並びます。
結果の表示と Google Maps URL の生成:
base_url = "https://www.google.co.jp/maps/dir/"
url = base_url + start.replace(' ', '+')
for destination, distance in sorted_destinations:
print(f'{destination}: {distance} meters')
url += '/' + destination.replace(' ', '+')
print("\nGoogle Maps Route URL:")
print(url)
ソートされた目的地と距離をコンソールに表示し、Google Maps で直接参照できるルートの URL を生成します。この URL にアクセスすると、ウェブブラウザ上で視覚的にルートを確認できます。
以上