えんじにゃーず・ハイ

主にエンジニアや技術情報についてつらつら書き連ねるブログです

GoogleMapsAPIを使って各ルートの距離/時間を取得する(GoogleMapsは埋め込まない)

施設間の距離/時間を楽に算出したい

業務でとあるページに入力された二点間の距離/時間を算出してほしいとの要望がありGoogleMapsAPIだけで実現できるか調査しましたので備忘録を。

色々な手法で求めることはできると思いますが、ここは安心と実績のGoogleMapsを利用して取得しましょう。

ページにGoogleMapを埋め込まないのが要件のため、ルート検索結果のレスポンスデータを受け取ることができれば解決です。

使用するAPIはGoogle Maps Directions APIとなります。

Google Maps Directions API公式ドキュメントを覗く

まずは公式ドキュメントから。

Google Maps Directions API  |  Google Maps Directions API  |  Google Developers

今回サーバーサイドをRailsで実装していることもあり、Javascriptを使わずにサーバーサイドでAPIにアクセスしてレスポンスデータを取得します。

GoogleMapsAPIの使用

Getting startedを参照します。

Directions Service  |  Google Maps JavaScript API  |  Google Developers

自身のGoogleアカウントでGoogle Maps Directions APIを有効化します。

gyazo.com

認証情報の作成は現時点では不要と思われますのでスキップします。

gyazo.com

ダッシュボードにGoogle Maps Directions APIがリストとして登録され有効化されていれば使用準備完了です。

もしGoogleAppAPIを使用するのが初めてであればAPI Keyが必要となりますので作成しておきましょう

gyazo.com

gyazo.com

gyazo.com

経路情報を取得する

ここまでこれば簡単です。後はドキュメントに従ってリクエストパラメータを組み立て、URLをブラウザに打ち込んでみましょう。

Google Maps Directions API  |  Google Maps Directions API  |  Google Developers

例えば東京駅から浅草駅へ行く際の距離・時間を取得したい場合、

が必要となります。移動手段は省略すると車となります。日本語はURLエンコードが掛かるので実際のURLは下記になるでしょう。

https://maps.googleapis.com/maps/api/directions/json?origin=%E6%9D%B1%E4%BA%AC%E9%A7%85&destination=%E6%B5%85%E8%8D%89%E9%A7%85&key=AIzaSyDFDIYBco398B-xvcJ9ND0ENWlk1vifgPs

Chromeで叩いてみると、下記のようなJSONレスポンスを得られるでしょう。

gyazo.com

赤枠で囲っている箇所が総距離と時間になります。簡単ですね。

後はJSONをパースして必要な情報を抜き出すだけです。

総括

今まではGoogleMapsを使ってページ上の地図を操作していましたが、APIならもっと簡単に扱えますね。地図を表示しなくても色々な用途に活用できそうです。正直、こんなに手軽とは思っていませんでした。

今回は簡単な例を元にAPIを使えるようにしましたが、様々なリクエストパラメータにより柔軟な経路探索を行うことができます。

また、複数の経路を元に最適な経路を選択したりすることもあるでしょう。レスポンスデータを使用してどのようなサービスを提供するかが大事ですね。