Google Maps
移動時間と距離を計算
概要
このブロックは、GoogleのDistance Matrix APIを使って、出発地から目的地までの移動距離と所要時間を計算します。
(画像をクリックすると拡大表示されます。)
以下のような1つまたは複数の出発地に対して、複数の目的地への移動距離と所要時間を求めたいときに使用します。
出発地 | 目的地 |
---|---|
福岡空港 | 太宰府天満宮 |
大濠公園 | |
福岡タワー | |
宗像大社 | |
博多駅 | 太宰府天満宮 |
大濠公園 | |
福岡タワー | |
宗像大社 |
このブロックは、以下のようなユースケースで有効です。
一度に多点間の距離を決定したい場合は、Distance Matrix APIを使用することで、必要なすべてのデータの取得が1回の呼び出しで済みます。配達所要時間でレストランのリストを絞り込んだり、利用者との距離の近さに応じて最適なドライバーを割り当てたり、顧客に最も近い場所にいる技術者を見極めて現場に派遣させるなどのユースケースには有効な方法です。
Google Developers Japan: Distance Matrix APIの使い方
本ブロックは、GoogleのDistance Matrix APIを利用しています。このためセルフサービスプランの場合は、利用するGCPプロジェクトにおいて、Distance Matrix APIを有効化しておく必要があります。
このブロックは、Google Distance Matrix APIを利用しているため、他のGoogle Cloud Platform各種APIの料金に加えて、その利用量に応じた料金が別途発生します(従量課金制)。
料金について詳しくは、Distance Matrix API の使用量と請求額を参照願います。移動手段に自動車を指定したり、出発地や目的地の指定にside_of_road
もしくはheading
の修飾子を指定した場合は、advancedの扱いになります。それ以外の場合は、basicの扱いになります。
※MAGELLAN BLOCKSは利用する機能に合わせて、データ保存先(Google Cloud StorageやBigQueryなど)の操作でGoogle Cloud Platformの各種APIを、機械学習の各機能でAI Platformの各種APIを利用しており、これらについても利用量に応じた料金が発生します。
プロパティ
プロパティ名 | 説明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ブロック名 |
編集パネルに配置した当該ブロックの表示名が変更できます。 ブロックリストパネル中のブロック名は変更されません。 |
||||||||||||||||
GCP APIキー |
このブロックで使用するGCP APIキーを指定します。 GCP APIキーは、次の手順で作成します。
|
||||||||||||||||
住所データを参照する変数 |
距離と時間を計算する出発地と目的地データが格納された変数を指定します。 出発地と目的地は、以下のいずれかで指定します。
出発地と目的地には、場所修飾子が使用できます。
住所や緯度経度を使用するよりも、Place IDの使用をおすすめします。住所や緯度経度を使用すると、常にそれらが示す座標に最も近い道路への位置に補正されます。 出発地と目的地データは、配列の配列もしくはオブジェクトの配列の形式で作成します。 以下それぞれのケースについて、具体例を用いて説明します(出発地と目的地は便宜上ランドマークを使用)。 配列の配列の場合は、以下のように出発地と目的地の順に並べそれをペアとして繰り返して指定します。 [ [出発地,目的地], [出発地,目的地],…, [出発地,目的地] ] オブジェクト生成ブロックを使用した具体例は以下のとおりです。 このケースの場合は、このプロパティに_.dataを指定します。 オブジェクトの配列の場合は、以下のように指定します。 [ { "origin":出発地, "destination":目的地 }, { "origin":出発地, "destination":目的地 }, … { "origin":出発地, "destination":目的地 }, ] オブジェクト生成ブロックを使用した具体例は以下のとおりです。 このケースの場合は、このプロパティに_.dataを指定します。 |
||||||||||||||||
結果を格納する変数名 |
移動距離と所要時間の計算結果を格納する変数を指定します。 この変数には、以下に示すキーを含んだオブジェクトが格納されます。
以下は、出力されたオブジェクトの例です。 [ { "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上のデータの形式が異なるため、何らかの方法でオブジェクトの配列形式に変換したデータを変数に格納する必要があります。
これには、「クエリーの実行」ブロックが役立ちます。なぜなら、「クエリーの実行」ブロックのクエリー結果は、オブジェクトの配列形式で変数に格納できるからです。
オブジェクトの配列形式のデータを変数で入力する必要があるブロックは、「クエリーの実行」ブロックと組み合わせて使うと便利です。
今回のケースでは、以下のクエリー文で「クエリーの実行」ブロックを実行すると、「移動時間と距離を計算」ブロックの入力に必要なデータ形式へ変換できます。
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 |