ブロックリファレンス

BLOCKS Reference

Google Maps

移動時間と距離を計算

概要

このブロックは、GoogleのDistance Matrix APIを使って、出発地から目的地までの移動距離と所要時間を計算します。

(画像をクリックすると拡大表示されます。)

以下のような1つまたは複数の出発地に対して、複数の目的地への移動距離と所要時間を求めたいときに使用します。

出発地 目的地
福岡空港 太宰府天満宮
大濠公園
福岡タワー
宗像大社
博多駅 太宰府天満宮
大濠公園
福岡タワー
宗像大社

このブロックは、以下のようなユースケースで有効です。

一度に多点間の距離を決定したい場合は、Distance Matrix APIを使用することで、必要なすべてのデータの取得が1回の呼び出しで済みます。配達所要時間でレストランのリストを絞り込んだり、利用者との距離の近さに応じて最適なドライバーを割り当てたり、顧客に最も近い場所にいる技術者を見極めて現場に派遣させるなどのユースケースには有効な方法です。

Google Developers Japan: Distance Matrix APIの使い方open_in_new

warning本ブロックは、GoogleのDistance Matrix APIを利用しています。このためセルフサービスプランの場合は、利用するGCPプロジェクトにおいて、Distance Matrix APIを有効化しておく必要があります。

warningこのブロックは、Google Distance Matrix APIを利用しているため、他のGoogle Cloud Platform各種APIの料金に加えて、その利用量に応じた料金が別途発生します(従量課金制)。

料金について詳しくは、Distance Matrix API の使用量と請求額open_in_newを参照願います。移動手段に自動車を指定したり、出発地や目的地の指定にside_of_roadもしくはheadingの修飾子を指定した場合は、advancedopen_in_newの扱いになります。それ以外の場合は、basicopen_in_newの扱いになります。

※MAGELLAN BLOCKSは利用する機能に合わせて、データ保存先(Google Cloud StorageやBigQueryなど)の操作でGoogle Cloud Platformの各種APIを、機械学習の各機能でAI Platformの各種APIを利用しており、これらについても利用量に応じた料金が発生します。

プロパティ

プロパティ名 説明
ブロック名

編集パネルに配置した当該ブロックの表示名が変更できます。

ブロックリストパネル中のブロック名は変更されません。

GCP APIキー

このブロックで使用するGCP APIキーを指定します。

GCP APIキーは、次の手順で作成します。

  1. Google Cloud Platformコンソールopen_in_newへ移動します。
  2. プロジェクトを選択します。
  3. 画面上部にある[認証情報を作成]ボタンをクリックします。
  4. APIキーを選択します。
住所データを参照する変数

距離と時間を計算する出発地と目的地データが格納された変数を指定します。

出発地と目的地は、以下のいずれかで指定します。

位置情報 説明
Place ID

Place IDの前には、place_id:を付ける必要があります。Place IDについては、Place IDsopen_in_new

住所

福岡県福岡市中央区今泉1丁目19ー22のような住所を指定します。この住所は、緯度経度の座標に変換されて道順の計算に利用されます。東京スカイツリーや東京タワーなどのランドマークでの指定も可能です。

緯度経度 33.5862718,130.3979053のように緯度と経度をカンマ(,)区切りで指定します。緯度と経度の間には、空白を入れないでください。

出発地と目的地には、場所修飾子が使用できます。

場所修飾子 説明
side_of_road
  • ルートが道路のどちら側を通るかを指定するための設定
  • 指定例:side_of_road:37.7663444,-122.4412006
  • この設定は、移動手段プロパティで自動車を指定したときのみ利用可能
heading
  • ルートの進む方向を指定するための設定
  • 指定例:heading=90:37.773279,-122.468780
  • heading=X:修飾子で指定。Xは0(含む)から360(含まない)の整数度の値。0は北を示し、90は東を示し、時計回りに続く。
  • この設定は、移動手段プロパティで自動車もしくは自転車を指定したときのみ利用可能

info住所や緯度経度を使用するよりも、Place IDの使用をおすすめします。住所や緯度経度を使用すると、常にそれらが示す座標に最も近い道路への位置に補正されます。

出発地と目的地データは、配列の配列もしくはオブジェクトの配列の形式で作成します。

以下それぞれのケースについて、具体例を用いて説明します(出発地と目的地は便宜上ランドマークを使用)。

配列の配列の場合は、以下のように出発地と目的地の順に並べそれをペアとして繰り返して指定します。

[ [出発地,目的地], [出発地,目的地],…, [出発地,目的地] ]

オブジェクト生成ブロックを使用した具体例は以下のとおりです。

このケースの場合は、このプロパティに_.dataを指定します。

オブジェクトの配列の場合は、以下のように指定します。

[
  {
    "origin":出発地,
    "destination":目的地
  },
  {
    "origin":出発地,
    "destination":目的地
  },
  …
  {
    "origin":出発地,
    "destination":目的地
  },
]

オブジェクト生成ブロックを使用した具体例は以下のとおりです。

このケースの場合は、このプロパティに_.dataを指定します。

結果を格納する変数名

移動距離と所要時間の計算結果を格納する変数を指定します。

この変数には、以下に示すキーを含んだオブジェクトが格納されます。

キー 説明
origin

指定した出発地です。

destination

指定した目的地です。

result_origin

出発地の住所です。

result_destination

目的地の住所です。

distance

出発地から目的地までの距離です(単位:メートル)。

duration

出発地から目的地までの所要時間です(単位:秒)。

duration_in_traffic

交通状況を考慮した所要時間です(単位:秒)。以下の条件が満たされたときのみ有効な値が設定されます。条件未達の場合は、0が設定されます。

  • 出発時刻が指定されている
  • 指定されたルート(出発地から目的地)で交通状況が利用可能である
  • 移動手段が自動車である

以下は、出力されたオブジェクトの例です。

[
  {
    "origin": "博多駅",
    "destination": "大濠公園",
    "result_origin": "日本、〒812-0012福岡県福岡市博多区博多駅中央街1−1 博多駅",
    "result_destination": "日本、〒810-0051福岡県福岡市中央区大濠公園1 大濠公園",
    "distance": 4485,
    "duration": 804,
    "duration_in_traffic": 0
  },
  {
    "origin": "博多駅",
    "destination": "太宰府天満宮",
    "result_origin": "日本、〒812-0012福岡県福岡市博多区博多駅中央街1−1 博多駅",
    "result_destination": "日本、〒818-0195福岡県太宰府市宰府4丁目7−1",
    "distance": 16974,
    "duration": 1591,
    "duration_in_traffic": 0
  },
  {
    "origin": "博多駅",
    "destination": "宗像大社",
    "result_origin": "日本、〒812-0012福岡県福岡市博多区博多駅中央街1−1 博多駅",
    "result_destination": "日本、〒811-3505福岡県宗像市田島2331",
    "distance": 33627,
    "duration": 2929,
    "duration_in_traffic": 0
  },
  {
    "origin": "博多駅",
    "destination": "福岡タワー",
    "result_origin": "日本、〒812-0012福岡県福岡市博多区博多駅中央街1−1 博多駅",
    "result_destination": "日本、〒814-0001福岡県福岡市早良区百道浜2丁目3−26",
    "distance": 9272,
    "duration": 855,
    "duration_in_traffic": 0
  },
  {
    "origin": "福岡空港",
    "destination": "大濠公園",
    "result_origin": "日本、〒812-0003福岡県福岡市博多区下臼井778−1 福岡空港(FUK)",
    "result_destination": "日本、〒810-0051福岡県福岡市中央区大濠公園1 大濠公園",
    "distance": 10244,
    "duration": 962,
    "duration_in_traffic": 0
  },
  {
    "origin": "福岡空港",
    "destination": "太宰府天満宮",
    "result_origin": "日本、〒812-0003福岡県福岡市博多区下臼井778−1 福岡空港(FUK)",
    "result_destination": "日本、〒818-0195福岡県太宰府市宰府4丁目7−1",
    "distance": 15620,
    "duration": 1323,
    "duration_in_traffic": 0
  },
  {
    "origin": "福岡空港",
    "destination": "宗像大社",
    "result_origin": "日本、〒812-0003福岡県福岡市博多区下臼井778−1 福岡空港(FUK)",
    "result_destination": "日本、〒811-3505福岡県宗像市田島2331",
    "distance": 35726,
    "duration": 3022,
    "duration_in_traffic": 0
  },
  {
    "origin": "福岡空港",
    "destination": "福岡タワー",
    "result_origin": "日本、〒812-0003福岡県福岡市博多区下臼井778−1 福岡空港(FUK)",
    "result_destination": "日本、〒814-0001福岡県福岡市早良区百道浜2丁目3−26",
    "distance": 11370,
    "duration": 948,
    "duration_in_traffic": 0
  }
]
到着時刻

到着時刻を時:分で指定します。

出発時刻

出発時刻を時:分で指定します。

移動手段

移動距離と所要時間を計算する際に使用する移動手段を指定します。

  • 自動車
  • 徒歩
  • 自転車
  • 公共交通機関
ブロックメモ このブロックに関するメモが記載できます。このブロックの処理に影響しません。
不使用

指定された対象物を避けたルートを計算するよう指定します(複数指定可)。

  • なし
  • 有料道路
  • 高速道路
  • フェリー
所要時間を計算する際に使用する仮定

所要時間の見積もり方法を選択します。

  • 過去と現在の交通状況のデータを基に見積る
  • 実際の移動時間よりも多めに見積もる
  • 実際の移動時間よりも少なめに見積もる
交通機関

「移動手段」が公共交通機関の場合の交通機関を指定します。複数の交通機関が指定可能です。

  • バス
  • 地下鉄
  • 列車
  • 市街電車やライトレール
  • 列車や市街電車、ライトレール、地下鉄
交通機関のリクエストの優先度

「移動手段」が公共交通機関の場合の移動時間と距離の計算時の制限事項を選択します。

  • 歩行距離に制限を付けてルートを計算する
  • 乗り換え回数に制限を付けてルートを計算する
結果の言語

取得結果の住所の表記言語を選択します。

サポートしている言語のリストは、Google Maps Platform FAQを参照してください。

結果の単位

計算する距離の単位を指定します。

  • メートル法
  • ヤードポンド法
エラー時の繰り返し回数

エラー発生時の再試行回数を指定します。

繰り返し間隔

エラー発生時の再試行ごとの時間間隔を秒単位で指定します。

使用例

ここでは、「移動時間と距離を計算」ブロックを使って、BigQuery上の出発地と目的地データから移動距離と所要時間を求めるケースを取り上げます。

前提として、BigQuery上の出発地と目的地データは、以下のように定義されているものとします。

出発地と目的地データ:
origin destinations
福岡空港 太宰府天満宮
大濠公園
福岡タワー
宗像大社
博多駅 太宰府天満宮
大濠公園
福岡タワー
宗像大社
スキーマ情報:
カラム名 タイプ モード
origin STRING NULLABLE
destinations STRING REPEATED
テーブル情報:
GCPプロジェクト名 my-project
データセット名 example
テーブル名 origin_destinations
データ概要:
カラム 内容
origin 出発地
destinations 目的地

「移動時間と距離を計算」ブロックを使用する場合は、「オブジェクトの配列形式」のデータを変数で入力する必要があります。

オブジェクトの配列形式」とは、下図のような配列の各要素がオブジェクトであるデータ形式のことです。

しかし、今回のサンプルではBigQuery上のデータの形式が異なるため、何らかの方法でオブジェクトの配列形式に変換したデータを変数に格納する必要があります。

これには、「クエリーの実行」ブロックが役立ちます。なぜなら、「クエリーの実行」ブロックのクエリー結果は、オブジェクトの配列形式で変数に格納できるからです。

infoオブジェクトの配列形式のデータを変数で入力する必要があるブロックは、「クエリーの実行」ブロックと組み合わせて使うと便利です。

今回のケースでは、以下のクエリー文で「クエリーの実行」ブロックを実行すると、「移動時間と距離を計算」ブロックの入力に必要なデータ形式へ変換できます。

SELECT
  origin,
  destination
FROM
  example.origin_destinations,
  UNNEST(destinations) AS destination

上記クエリー文で、「クエリーの実行」ブロックを実行すると、下図のようなオブジェクトの配列形式のデータが、変数へ格納されます。

このように、「クエリーの実行」を使うと、BigQuery上のデータを簡単に変換・加工できます。

例えば、以下のように「クエリーの実行」ブロックと「移動時間と距離を計算」ブロックをつなげると、BigQuery上の出発地と目的地データから移動距離と所要時間を簡単に計算できます。

結果は、下図のようなオブジェクトの配列形式で変数に格納されます。

変数に格納されるデータの形式は、オブジェクトの配列であるため、この形式で入力可能なブロックと組み合わせると便利です。例えば、「変数からテーブルへロード」ブロックは、オブジェクトの配列形式のデータを変数で入力し、BigQueryテーブルにそのデータを格納してくれます。

ということで、以下のように「移動時間と距離を計算」ブロックに「変数からテーブルへロード」ブロックを繋げると、経緯度から住所へ変換したデータをBigQueryテーブルに簡単に格納できます。

このフローを実行すると、以下のような形でBigQueryテーブルにデータが格納されます。

origin destination result_origin result_destination distance duration duration_in_traffic
博多駅 大濠公園 日本、〒812-0012 福岡県福岡市博多区博多駅中央街1−1 博多駅 日本、〒810-0051 福岡県福岡市中央区大濠公園1 大濠公園 4485 806 0
博多駅 太宰府天満宮 日本、〒812-0012 福岡県福岡市博多区博多駅中央街1−1 博多駅 日本、〒818-0117 福岡県太宰府市宰府4丁目7−1 16974 1585 0
博多駅 宗像大社 日本、〒812-0012 福岡県福岡市博多区博多駅中央街1−1 博多駅 日本、〒811-3505 福岡県宗像市田島2331 33627 2900 0
博多駅 福岡タワー 日本、〒812-0012 福岡県福岡市博多区博多駅中央街1−1 博多駅 日本、〒814-0001 福岡県福岡市早良区百道浜2丁目3−26 9240 855 0
福岡空港 大濠公園 日本、〒812-0003 福岡県福岡市博多区下臼井778−1 福岡空港 (FUK) 日本、〒810-0051 福岡県福岡市中央区大濠公園1 大濠公園 10244 959 0
福岡空港 太宰府天満宮 日本、〒812-0003 福岡県福岡市博多区下臼井778−1 福岡空港 (FUK) 日本、〒818-0117 福岡県太宰府市宰府4丁目7−1 15620 1320 0
福岡空港 宗像大社 日本、〒812-0003 福岡県福岡市博多区下臼井778−1 福岡空港 (FUK) 日本、〒811-3505 福岡県宗像市田島2331 35726 2977 0
福岡空港 福岡タワー 日本、〒812-0003 福岡県福岡市博多区下臼井778−1 福岡空港 (FUK) 日本、〒814-0001 福岡県福岡市早良区百道浜2丁目3−26 11339 932 0

この情報は役に立ちましたか?