ガイドAPIリファレンス
ガイド

トレースからルートをインポートするには

ルートインポートサービスはGPSトレースポイントとルート検索パラメーターのサブセットを受け入れるREST APIです。結果として得られる応答にはルートのリストが含まれます。このリストを使用して、運転ルート上の追加の地図属性や、到達予測時刻および交通事案などのその他のパラメーターを利用できます。

サポートされるユースケース

  • HEREプラットフォームに外部ルートを取り込めるようにする
  • 違法な運転操作、トラック制約、エネルギー消費量を明らかにし、移動後の分析とコスト計算のためにルート情報を提供する

トレースの頻度

最良の結果を得るには、1 Hz の GPS データ、または数メートル間隔の任意のポイントを使用します。 ポイント数が少ないトレースの場合、ルート インポート サービスはおおまかな再構成を行おうとします。 状況によっては、連続するポイントの距離が遠すぎる (オンロード距離が約 30 km を超える) と到達不能と見なされ、いずれかのポイントの照合に失敗することがあります。

経由地のサポート

  • ルート インポート サービスは経由地をサポートします。インポートされたルートにはユーザー指定の経由地が含まれ、これを音声ガイダンスや運転操作の指定に使用できます。
  • 経由地はトレースポイントへのインデックスによって定義され、緯度/lon座標はありません。
  • トレースポイントを参照する経由地と照合しない場合、この経由地は、ルートのレスポンスの対応する通知とともに、次に照合するトレースポイントを参照します。
  • 結果として得られるルートがすべてのトレースポイントと照合しない場合は、分割されたルートがルートの応答に追加されることに注意してください。
  • ルートインポートサービスは、ルートの形状に影響を与える属性をサポートしませんが、stopDurationはサポートします。

制限

  1. リクエストで受け入れられる GPS トレース ポイントの最小数は 2 で、最大数は 50000 です。
  2. POSTボディのサイズ制限は10 MiBです。
  3. トレースポイントマッチングでは、ルートインポートサービスは自動車走行が禁止されているセグメントを考慮しません。
  4. ルートインポートサービスでは、分離帯のない双方向道路でのUターンが制限付きでサポートされます。トレースに車両のUターンが含まれる場合、方向の変更が識別されると、サービスはルートを複数のセクションに分割します。
  5. 通行料金は、ルートインポートサービスで直接利用できません。ルートインポートを使用する際に料金を取得する方法については、このチュートリアルを参照してください。

リクエストの例

  1. 走行不可能なリンクを使用したルートインポートリクエストでは分割されたセクションを得ることができます。
curl -gX POST 'https://router.hereapi.com/v8/import?'\
'return=polyline,summary&'\
'transportMode=car&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "trace": [
    {
      "lat": 52.541121,
      "lng": 13.278989
    },
    {
      "lat": 52.541338,
      "lng": 13.276435
    },
    {
      "lat": 52.544976,
      "lng": 13.276273
    },
    {
      "lat": 52.546982,
      "lng": 13.275723
    },
    {
      "lat": 52.548535,
      "lng": 13.276305
    },
    {
      "lat": 52.548535,
      "lng": 13.27873
    }
  ]
}
'

結果として得られる応答でルートが複数のセクションに分割されます。

{
  "notices": [
    {
      "title": "Import: Provided trace could not be matched into a continuous route.\nSome trace points were unmatched.",
      "code": "importSplitRoute",
      "severity": "info"
    }
  ],
  "routes": [
    {
      "id": "5129a87e-fe4c-4a0f-bcc6-a17b4d7a3229",
      "sections": [
        {
          ...,
          "summary": {
            "duration": 14,
            "length": 175,
            "baseDuration": 12
          },
          "polyline": "BGir7mkDywvqZ-FhlC8BvR8BjSsEvlBkCzQ",
          "language": "en-us",
          "transport": {
            "mode": "car"
          }
        },
        {
          ...,
          "summary": {
            "duration": 12,
            "length": 165,
            "baseDuration": 12
          },
          "polyline": "BG87pnkDipqqZ_Bq1ClBkiC",
          "language": "en-us",
          "transport": {
            "mode": "car"
          }
        }
      ]
    }
  ]
}
  1. これは無効な移動モードを使用したルートインポートリクエストです。
curl -gX POST 'https://router.hereapi.com/v8/import?'\
'return=polyline,summary&'\
'transportMode=pedestrian&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "trace": [
    {
      "lat": 19.040871,
      "lng": 72.81978
    },
    {
      "lat": 19.041056,
      "lng": 72.820037
    },
    {
      "lat": 19.041229,
      "lng": 72.820354
    },
    {
      "lat": 19.041366,
      "lng": 72.82063
    },
    {
      "lat": 19.041548,
      "lng": 72.821042
    }
  ]
}
'

指定した移動モードが指定したトレースに有効でないため、結果として得られる応答にエラーが返されます。

{
  "notices": [
    {
      "title": "Route handle decoding failed due to forbidden segments for the specified transport mode.",
      "code": "violatedTransportModeInRouteHandleDecoding",
      "severity": "critical"
    }
  ],
  "routes": []
}
  1. このリクエストは動力付きの車両 (乗用車、トラック、スクーター、バス、タクシー) の制限の処理を示しています。

ルート インポート サービスでは、動力付きの車のリクエスト時に「制約のソフトな処理」を行うことができます。

curl -gX POST 'https://router.hereapi.com/v8/import?'\
'return=polyline,summary&'\
'transportMode=truck&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "trace": [
    {
      "lat": 52.503323,
      "lng": 13.211876
    },
    {
      "lat": 52.501416,
      "lng": 13.210769
    },
    {
      "lat": 52.500363,
      "lng": 13.2089
    },
    {
      "lat": 52.499144,
      "lng": 13.206339
    },
    {
      "lat": 52.497466,
      "lng": 13.203929
    },
    {
      "lat": 52.496107,
      "lng": 13.200937
    },
    {
      "lat": 52.495536,
      "lng": 13.200078
    },
    {
      "lat": 52.494839,
      "lng": 13.199987
    }
  ]
}
'

応答には、ルートと、違反について言及するセクション レベルの重大な通知が返されます。

{
  "routes": [
    {
      "id": "396a7129-4edc-4a85-91a1-abe62ae7092c",
      "sections": [
        {
          ...,
          "summary": {
            "duration": 363,
            "length": 1303,
            "baseDuration": 363
          },
          "polyline": "BG0xxkkD2ssmZjZ2DrJUrJnBjN3D3NvHrOjNjNjSjwBvyCzKvRvRnf_YrxBrnBv3CzFnLnGzK_iB_2BjDrEnG3I7GjInavgB_JvM_J3N3IrOjInQz8BnoE7G_O7GrOvMvW7aztB3DrErErE7LjI_E7BjNT5MqI",
          "notices": [
            {
              "title": "Violated vehicle restriction.",
              "code": "violatedVehicleRestriction",
              "severity": "critical"
            }
          ],
          "language": "en-us",
          "transport": {
            "mode": "truck"
          }
        }
      ]
    }
  ]
}
  1. このリクエストは歩行者モードと自転車モードの制限の処理を示しています。

歩行者モードと自転車モードでは、ルートインポートがリクエストされたときに当該モードで許可されていないセグメントがある場合、ルート形状を無視した計算が行われ、移動モード違反を説明するエラーメッセージが返されます。

curl -gX POST 'https://router.hereapi.com/v8/import?'\
'return=polyline,summary&'\
'transportMode=pedestrian&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "trace": [
    {
      "lat": 19.05962,
      "lng": 72.846409
    },
    {
      "lat": 19.059171,
      "lng": 72.846397
    },
    {
      "lat": 19.058749,
      "lng": 72.846392
    },
    {
      "lat": 19.058333,
      "lng": 72.846392
    }
  ]
}
'
{
  "notices": [
    {
      "title": "Route handle decoding failed due to forbidden segments for the specified transport mode.",
      "code": "violatedTransportModeInRouteHandleDecoding",
      "severity": "critical"
    }
  ],
  "routes": []
}
  1. このリクエストは経由地のサポートを示しています。

トレース ポイントにインデックスを設定して経由地を定義します。結果として得られる応答でルートが複数のセクションに分割されます。

curl -gX POST 'https://router.hereapi.com/v8/import?'\
'return=polyline,summary&'\
'transportMode=car&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "trace": [
    {
      "lat": 52.533318,
      "lng": 13.352151
    },
    {
      "lat": 52.533903,
      "lng": 13.353281
    },
    {
      "lat": 52.534498,
      "lng": 13.354426
    }
  ],
  "via": [
    {
      "index": 1,
      "stopDuration": 3600
    }
  ]
}
'

結果として得られる応答でルートが複数のセクションに分割されます。

{
  "routes": [
    {
      "id": "3ff638c7-dd97-46d0-8efa-ae482b3d64ea",
      "sections": [
        {
          ...,
          "postActions": [
            {
              "action": "wait",
              "duration": 3600
            }
          ],
          ...,
          "summary": {
            "duration": 3614,
            "length": 101,
            "baseDuration": 8
          },
          "polyline": "BG4jsmkDou-uZwTwmBwQ-gB",
          "language": "en-us",
          "transport": {
            "mode": "car"
          }
        },
        {
          ...,
          "summary": {
            "duration": 13,
            "length": 102,
            "baseDuration": 9
          },
          "polyline": "BG4ntmkD21gvZ0aq1B2JsT",
          "language": "en-us",
          "transport": {
            "mode": "car"
          }
        }
      ]
    }
  ]
}