Google Maps Direction API を使ってみる。

概要

最近、mapsAPIを調べた所、Direction APIというのがあったのを知った のでまとめておきます。(昔からあったかも??)

Direction APIとは

2つの地点の距離、移動時間を計測するAPIです。

公式HPにそのまま書いてある通りです。

移動時間については、徒歩、自転車、電車、車など様々なモードが選んで計算してくれるところが 良いところではないでしょうあk。

使い方

APIを用いる際に必要なのは以下の2点となります。

  • APIキー取得、DirectionAPI有効化
  • リクエストパラメータ設定

リクエストパラメータについて

必須パラメータ

  • origin #出発地: 指定方法は 住所、緯度・経度
  • destination # 目的地を示す。 指定方法はoriginと同じ
  • APIKEY # 取得したGoogle maps api key

※ 場所指定(origin destination)は多少アバウトでも拾ってくれます。

オプションパラメータ(抜粋)

  • mode #移動時間を計算する際の交通手段を選択
  • units #移動距離の単位を選択。
  • arrival_time # 到着時刻を指定  UNIXTIMEからの経過時間で指定することに注意
  • departure_time # 出発時刻を指定 

実行してみる

request

$curl -s "https://maps.googleapis.com/maps/api/distancematrix/json?\
mode=walking&origins=渋谷www&destinations=恵比寿リキッドルーム\
&key=[API_KEY]" 

response

{
   "destination_addresses" : [ "Japan, 〒150-0011 Tokyo, Shibuya, Higashi, 3−16−6" ],
   "origin_addresses" : [
      "Japan, 〒150-0042 Tokyo, Shibuya, Udagawacho, 13−17 ライズビル 地下"
   ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "2.0 km",
                  "value" : 2005
               },
               "duration" : {
                  "text" : "24 mins",
                  "value" : 1460
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

次はjsonを抜き出したケース

request

$curl -s "https://maps.googleapis.com/maps/api/distancematrix/json?\
mode=walking&origins=渋谷www&destinations=恵比寿リキッドルーム\
&key=[API_KEY]"\
 | jq '({ destination: .destination_addresses[] },{ origin: .origin_addresses[] }) ,{distance: .rows[].elements[].distance.text } ,  {distance: .rows[].elements[].duration.text }'\
 | jq 'keys[],.[]' | xargs echo

response

destination Japan, 〒150-0011 Tokyo, Shibuya, Higashi, 3−16−6 origin Japan, 〒150-0042 Tokyo, Shibuya, Udagawacho, 13−17 ライズビル 地下 distance 2.0 km duration 24 mins

感想

有益な点

事前に登録してある場所の検索には非常に有益ではないでしょうか。

例えば、緯度・経度を事前に登録してある場合のケース(不動産サービスやホテルに対して駅からの距離) においては非常に強力だと思います。

やや残念な点

フリーキーワードで位置検索する場合の認識が甘いです。

例をあげます。

出発地=渋谷駅 到着地=代々木駅 でリクエストした場合は以下の通りとなります。

request

$curl -s "https://maps.googleapis.com/maps/api/distancematrix/json?\
mode=walking&origins=JR渋谷駅&destinations=代々木駅\
&language=ja&key=[API_KEY]"\
 | jq '({ destination: .destination_addresses[] },{ origin: .origin_addresses[] }) ,{distance: .rows[].elements[].distance.text } ,  {distance: .rows[].elements[].duration.text }'\
 | jq 'keys[],.[]' | xargs echo

response

destination 日本 origin 日本、東京都渋谷区道玄坂
 distance 3.5 km duration 11分

というように一般的に使われそうなキーワードでも引っかからないことがあります。