大型車両のルートと到着予定時刻を生成する

対象読者: このガイドは、トラックなどの大型車両を使用した旅行の計画と実行のためのサービスを構築するデベロッパーを対象としています。 関連するユースケースとしては、移動時間と距離の計算、到着予定時刻の計算、ナビゲーション アプリで使用されるルートの生成などがあります。

このガイドの内容: このガイドでは、Routes API と大型車両のルート設定を使用して、商用トラックや乗用バスなどの大型車両の特定の属性を考慮したルート、移動距離、予測移動時間、到着予定時刻をリクエストする方法について説明します。

Route Optimization API を使用して大型車両のフリートレベルの計算を行う方法については、Route Optimization のトラック ルーティング のドキュメントをご覧ください。

学習内容

このガイドでは、次の方法について説明します。

  • 有効なルート設定リクエストを作成する。
  • 寸法、重量、その他の特性を使用して、実際の車両の車両情報を指定する。
  • ルートトークンや移動の安全に関するフラグなど、レスポンスを解釈する。

前提条件

  1. Google Cloud プロジェクトを作成し、Routes API を有効にする必要があります。
  2. プロジェクトが大型車両のルート設定用にプロビジョニング されている必要があります。大型車両の ルート設定は、一部のお客様のみご利用いただけます。アクセスをリクエストするには、 こちらからお問い合わせください。

制限事項

始める前に、次の制限事項と要件を確認してください。

  • 利用可能な地域: 大型車両のルート設定は、 米国本土 48 州 (一般提供)と 日本 (試験運用版)でご利用いただけます。アラスカ、ハワイ、米国の準州ではご利用いただけません。
  • ドライバーへのアドバイスと安全性 。ドライバーは、この API から返されるルートのみに頼って安全や合法性を判断してはなりません。ルートが車両に適しているとは限りません。ルートに従うと、低い橋や大型車両が通行禁止の道路など、危険な場所に遭遇する可能性があります。
  • ベスト エフォート ルート 。場合によっては、API が移動制限に完全に準拠したルートを見つけられないことがあります。代わりに、制限区域を通過する可能性のある「ベスト エフォート」ルートが返されます。Routes API レスポンスでは、これらのルートに routeRestrictionsPartiallyIgnored フィールドで明確にフラグが設定されます。 このような場合は、他のソースデータを使用してルートを慎重に計画してください。 フラグが設定されたルートを、計画やナビゲーションの唯一の情報源として使用しないでください。
  • サポートされていない機能: 大型車両のルート設定では、 次の機能はサポートされていません。
    • トラックの通行料金
    • 制限速度
    • 放射性危険物のルート設定
  • 使用量の上限: すべてのリクエストには、標準の 1 秒あたりのクエリ数 (QPS)の上限が適用されます

トラックのルート設定リクエストを作成する

トラックのルートを取得するには、車両を説明する特定のパラメータを指定して、Routes API エンドポイントに HTTPS リクエストを送信します。このセクションの概念は、単一ルートとルート行列のリクエストの両方に適用されます。

エンドポイント

トラックのルート設定には、次の 2 つのエンドポイントを使用できます。

  • computeRoutes: 1 つの出発地と 1 つの目的地間の単一ルートを計算します。
  • computeRouteMatrix: 出発地と目的地の行列の距離と所要時間を計算しますが、ルートのポリラインは返しません。

リクエストの主なパラメータ

リクエストの本文には、トラックのルート設定を有効にするために次のパラメータを含める必要があります。

  • travelMode: この値を TRUCK に設定します。
  • routingPreference: この値を TRAFFIC_AWARE_OPTIMAL に設定します。
  • routeModifiers: このオブジェクトには、車両の属性を定義する vehicleInfo オブジェクトが含まれています。vehicleInfo オブジェクトについては、以下で詳しく説明します。

車両属性を指定する

リクエストを送信するには、車両を説明する vehicleInfo オブジェクトを含むリクエスト本文を指定する必要があります。この情報は、実際の車両の物理的な詳細と一致する仕様と考えることができます。このサービスでは、車両の属性に基づいて道路の制限を考慮したルートを返すために、これらの詳細情報が必要です。

車両の測定値

フィールド名で示されているように、車両の重量をキログラム単位で、車両の寸法をミリメートル単位で指定します。たとえば、全高はミリメートル単位(totalHeightMm)で指定する必要があります。トラックの寸法はフィートまたはメートルで表されることが多いため、単位の変換が必要になる場合があります。

ヤード・ポンド法からメートル法への変換

ヤード・ポンド法からメートル法に変換する場合は、標準的な道路とアンダーパスのサイズ制限とともに、特定の車両の寸法を常に考慮してください。 これは、端数を含む値の場合に特に重要になります。実際の車両のサイズによっては、端数を含む値を切り上げると、車両のルート設定が過度に制限される可能性があります。

次に例を示します。

  • : 米国のトレーラーの多くは幅が 8 フィート 6 インチで、 2,590.8 mm に相当します。2,591 mm に切り上げると、車両が 8 フィート 6 インチを超えることになり、米国の道路では大型車両として分類されます。その結果、意図した制約とは大きく異なる制約に基づいてルートが計算されます。
  • 高さ: 高さ 13.5 フィートの一般的なトラクター トレーラーの場合、高さ 11 フィートの橋の下を通るルートは適していません。ただし、高さ 10 フィート程度の小型の箱型トラックであれば、アンダーパスを通過できます。したがって、車両の属性を正確に指定することが重要です。

トラックの寸法とアンダーパスの寸法を比較した図

次のコード スニペットは、vehicleInfo オブジェクトの例を示しています。

"vehicleInfo": {
      "totalAxleCount": 5,
      "totalHeightMm": 4114,
      "totalLengthMm": 21945,
      "totalWidthMm": 2590,
      "totalWeightKg": 32658,
      "trailerInfo": [{
        "lengthMm": 16154
      }

vehicleInfo オブジェクトのフィールド

次の表に、リクエストで送信できる車両と積載物の定義をすべて示します。

フィールド 説明 注 / 値
totalHeightMm 車両の最大高さ。 ミリメートル単位で切り捨て。 切り捨ての詳細については、ヤード・ポンド法からメートル法への変換をご覧ください。
totalWidthMm 車両の最大幅。 ミリメートル単位で切り捨て。
totalLengthMm 車両とトレーラーの合計長さ。 ミリメートル単位で切り捨て。
totalWeightKg 車両総重量(トレーラーと積載物を含む)。 キログラム単位で切り捨て。
totalAxleCount 車両とトレーラーの車軸の合計数。 正確な値。
trailerInfo (省略可) トレーラーごとに 1 つのオブジェクトの配列。 箱型トラックなど、トレーラーのない車両の場合は省略します。
hazardousGoodsTypes (省略可) 搭載されている危険物を指定する配列。 EXPLOSIVES、GASES、FLAMMABLE、COMBUSTIBLE、ORGANIC、POISON、CORROSIVE、ASPIRATION_HAZARD、ENVIRONMENTAL_HAZARD、OTHER

フィールド マスクを使用する

最適な結果を得るには、リクエストに X-Goog-FieldMask ヘッダーを含めて、レスポンスで必要なフィールドを正確に指定します。フィールド マスクを使用すると、レイテンシが短縮され、重要なアドバイス フィールドを確実に受け取ることができます。フィールド マスクには、少なくとも routes.travelAdvisory.routeRestrictionsPartiallyIgnored を含めてください。これは、ルートに車両に適用される制限が 1 つ以上あるかどうかを示します。

Routes API での FieldMask の詳細については、こちら の記事をご覧ください。

有料道路

有料道路を使用しないルートを優先するには、リクエストの routeModifiers プロパティに avoidTolls を指定します。ルート修飾子の詳細については、 回避するルートの機能を指定するをご覧ください。

avoidTolls を指定しても、レスポンスで有料道路を使用しないルートが保証されるわけではありません。場合によっては、出発地と目的地の間の移動に有料道路を使用する必要があります。Routes API リクエストの fieldmask に routes.warnings を含めると、有料道路を含むルートには、このフィールド内に適切なアノテーションが付けられます。

その他のルート設定の動作

travelModeTRUCK に設定すると、API は大型車両の操作性を考慮してルートを自動的に最適化します。生成されたルートでは、U ターンが回避され、小さな道路よりも州間高速道路や高速道路が優先されます。これらの動作を有効にするために、追加のパラメータや修飾子を設定する必要はありません。

computeRoutes で単一のルートを計算する

computeRoutes エンドポイントを使用して、1 つの出発地と 1 つの目的地間のトラック固有のルートを計算します。

computeRoutes リクエストの例

一般的なセミトレーラー トラックの完全な curl リクエストを次に示します。この例には、エンドポイント、ヘッダー、リクエスト本文が含まれています。

curl --location 'https://routes.googleapis.com/directions/v2:computeRoutes' \
--header 'Content-Type: application/json' \
--header 'X-Goog-Api-Key: YOUR_API_KEY' \
--header 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.routeToken,routes.travelAdvisory.routeRestrictionsPartiallyIgnored' \
--data '{
 "origin": {
    "location": {
      "latLng": {
        "latitude": 40.883274,
        "longitude": -74.704574
      }
    }
  },
  "destination": {
    "location": {
      "latLng": {
        "latitude": 40.991920,
        "longitude": -75.183371
      }
    }
  },
  "travelMode": "TRUCK",
  "routingPreference": "TRAFFIC_AWARE_OPTIMAL",
  "routeModifiers": {
    "vehicleInfo": {
      "totalAxleCount": 5,
      "totalHeightMm": 4114,
      "totalLengthMm": 21945,
      "totalWidthMm": 2590,
      "totalWeightKg": 32658,
      "trailerInfo": [{
        "lengthMm": 16154
      }]
    }
  }
}'

computeRoutes レスポンスの例

これは、上記のリクエストに対するレスポンスの例です。travelAdvisory オブジェクトに routeRestrictionsPartiallyIgnored フラグが含まれていないことに注意してください。これは、ルートにフラグが設定されておらず 、車両の属性に完全に準拠していると考えられることを示します。

{
  "routes": [
    {
      "distanceMeters": 3426,
      "duration": "312s",
      "travelAdvisory": {},
      "routeToken": "CogCCogBChA7b39q54cKGCys_VXaDADjEhgszp8YhZFw0xvzm7SygpvCeIvJ7V0r6XIaJZ6BxNkMa_8HhhqlAci7hYMXi6UCpPgDW-yoAf8gzgHiEYyJAnoiAQU6AQFCB27cD9UCwwdKCMX2Ij7RpxY_eAGqARdUNENZWllLS0tJRGZ2T01QMVptSjRBaxAEGmIKYBIWCAAQAxAGEBMQEhgCQgQaAggFSgIIASIbChdUNENZWmVTc0o0RGZ2T01QMVptSjRBa3ABKAQyJ3RydWNraW5nOjpzZW1pLXRyYWlsZXItdHJ1Y2staGVhdnktc29mdCIVAOzExFsGGGfjVIIY7GXjYbPyONS8EiQiInRydWNraW5nOjpzZW1pLXRyYWlsZXItdHJ1Y2staGVhdnk"
    }
  ]
}

computeRoutes レスポンスを解釈する

computeRoutes エンドポイントへのリクエストが成功すると、1 つ以上の可能なルートを含む JSON レスポンス オブジェクトが返されます。

レスポンスの主なフィールド
  • エンコードされたルートのジオメトリ: routes.polyline。これは、地図上にルートを描画するために使用できます。
  • 推定移動時間: routes.duration(秒単位)。大型車両のルート設定の移動時間は、道路網上の実際のトラックの観測された移動速度に基づいてトレーニングされた新しいモデルを使用します。また、推定移動時間を出発予定時刻に加算して、到着予定時刻を計算することもできます。
  • ルートの総距離: routes.distanceMeters(メートル単位)。
  • ルートトークン: routes.routeToken。これは、正確に計算されたルートを表す不透明なトークンです。このトークンを Navigation SDK に渡すことで、ドライバーに同じトラック固有のルートが表示されます。詳細については、 Android または iOS 向けの Navigation SDK ガイドをご覧ください。
ルートの安全に関するフラグを確認する

レスポンスを受け取ったら、まずルートの安全に関するフラグを確認します。指定されたルートに、車両に適さない制限が 1 つ以上含まれている場合は、travelAdvisory.routeRestrictionsPartiallyIgnored フィールドが true に設定されます。

このフィールドは、「このルートに潜在的な問題のフラグが設定されていますか? 」という質問に答えるフラグとして機能します。

  • false (またはレスポンスから省略): ルートにフラグが設定されていません。リクエストで指定したパラメータに完全に準拠 していると考えられるルートが見つかりました。
  • true: ルートにフラグが設定されています。完全に準拠したルートが見つからなかったため、安全または合法でない可能性のある「ベスト エフォート」ルートが返されました 。このルートは慎重に使用する必要があります。

ルートの行列を計算する(computeRouteMatrix

computeRouteMatrix エンドポイントを使用すると、多くの出発地と目的地の間の移動時間と距離を効率的に比較できます。たとえば、新しい集荷場所の最寄りのトラックを見つけるために使用できます。目的で使用する車両の出発地を特定したら、computeRoutes リクエストを発行して、提案された車両のルートの詳細とルートトークンを取得できます。

computeRouteMatrix を使用するには、リクエストのルートではなく、各 origin オブジェクト内で vehicleInfo を指定します。

computeRouteMatrix リクエストの例

{
  "origins": [
    {
      "waypoint": { "location": { "latLng": { "latitude": 32.77, "longitude": -96.85 }}},
      "routeModifiers": { "vehicleInfo": { /* ...vehicle attributes... */ } }
    },
    {
      "waypoint": { "location": { "latLng": { "latitude": 33.61, "longitude": -112.11 }}},
      "routeModifiers": { "vehicleInfo": { /* ...vehicle attributes... */ } }
    }
  ],
  "destinations": [
    { "waypoint": { "location": { "latLng": { "latitude": 35.02, "longitude": -106.64 }}}},
    { "waypoint": { "location": { "latLng": { "latitude": 29.77, "longitude": -95.40 }}}}
  ],
  "travelMode": "TRUCK",
  "routingPreference": "TRAFFIC_AWARE_OPTIMAL"
}

computeRouteMatrix レスポンスの例

レスポンスは配列で、各オブジェクトには 1 つの出発地と目的地のペアの所要時間と distanceMeters が含まれています。

[
  {
    "originIndex": 0,
    "destinationIndex": 1,
    "status": {},
    "distanceMeters": 392372,
    "duration": "14037s",
    "condition": "ROUTE_EXISTS"
  },
  { ... }
]

次のステップ