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

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

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

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

学習内容

次の操作を行う方法について学習します。

  • 有効なルーティング リクエストを作成します。
  • 寸法、重量、その他の特性を使用して、実際の車両の車両プロファイルを指定します。
  • ルートトークンや旅行の安全フラグなど、レスポンスを解釈します。

前提条件

  1. Google Cloud プロジェクトを作成し、Routes API を有効にする必要があります。
  2. プロジェクトが大型車両のルート設定用にプロビジョニングされている必要があります。この手順を完了するには、Google の担当者にお問い合わせください。

制限事項

始める前に、次の制限事項と要件を把握しておく必要があります。

  • 利用可能な地域: 大型車両のルート選択は、米国本土の 48 州でのみご利用いただけます。
  • 大型車両のルーティングはプレビュー段階のサービスです。ドライバーは、この API から返されるルートのみに頼って安全や合法性を判断してはなりません。ルートが車両に適しているとは限らず、ルートに従うと、低い橋や大型車両の通行が禁止されている道路などの危険にさらされる可能性があります。
  • ベスト エフォート型のルート。場合によっては、API で移動制限に完全に準拠したルートが見つからないことがあります。代わりに、制限区域を通過する可能性のある「ベスト エフォート」ルートを返します。Routes API レスポンスでは、routeRestrictionsPartiallyIgnored フィールドでこれらのルートが明確に示されます。このような場合は、他のソースデータを使用して、ルートを慎重に計画してください。フラグ付きのルートを計画やナビゲーションの信頼できる唯一の情報源として使用しないでください。
  • サポートされていない機能: このサービスにさらに多くの機能を追加する作業を進めていますが、大型車両のルーティングでは次の機能はサポートされていません。
    • トラックの通行料金
    • 制限速度
    • 放射性危険物のルーティング
  • 使用量の上限: すべてのリクエストには、標準の秒間クエリ数(QPS)の上限が適用されます。

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

トラックのルートを取得するには、車両を説明する特定のパラメータを含む HTTPS リクエストを Routes API エンドポイントに送信します。

エンドポイント

トラックのルート設定には、次の 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 インチを超えることになり、米国の道路では大型車両に分類されます。これにより、意図した制約とは大きく異なる制約に従って計算されたルートが生成されます。
  • 高さ: 高さ 11 フィートの橋の下を通るルートは、高さ 13.5 フィートの一般的なトラクター トレーラーには適していません。ただし、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 ヘッダーを含めて、レスポンスで必要なフィールドを正確に指定します。フィールド マスクを使用すると、レイテンシが短縮され、重要なアドバイザリ フィールドを確実に受け取ることができます。ルートに車両に適用される制限が 1 つ以上あるかどうかを示すため、フィールド マスクには常に routes.travelAdvisory.routeRestrictionsPartiallyIgnored を含める必要があります。

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

有料道路

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

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

完全な curl リクエストの例

一般的なセミトレーラー トラックの完全な 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 レスポンスを解釈する

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

主なレスポンス フィールド

  • エンコードされたルートのジオメトリ: routes.polyline。これは、地図上にルートをレンダリングするために使用できます。
  • 推定所要時間: routes.duration(秒単位)。大型車両のルート検索の所要時間では、道路網上の実際のトラックの観測された移動速度に基づいてトレーニングされた新しいモデルが使用されます。また、推定所要時間を推定出発時刻に加算して、到着予定時刻を計算するためにも使用できます。
  • ルートの合計距離: routes.distanceMeters(メートル単位)。
  • ルートトークン: routes.routeToken。これは、計算された正確なルートを表す不透明なトークンです。このトークンを Navigation SDK に渡して、ドライバーに同じトラック専用ルートが表示されるようにします。詳しい手順については、ターンバイターン ナビゲーションを提供するガイドをご覧ください。

ルートの安全フラグを確認する

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

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

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

例: computeRoutes レスポンス

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

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

トラック ルートのマトリックスを取得する

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

computeRouteMatrix を使用するには、各オリジン オブジェクト内で vehicleInfo を指定します。

リクエスト例

{
  "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"
}

レスポンスの例

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

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

次のステップ