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

ルート内のセグメントを回避するには

セグメントは道路のセクションまたは直線で移動可能な区間を表すトポロジーセグメントです (「セグメント」を参照)。

多くのユースケースでは、ルートが通過する特定のセグメントを回避する一時的なユーザー固有のルートの作成が必要になる場合があります。これはたとえば、事故により前方の道路が通行止めになっていることにドライバーが気付いた場合や、サイズ制限により特定の道路を車両が避けるべきであることを、計画を立てている人が知っている場合などです。

avoid[segments] フィーチャーを使用すると、ユーザーはそのようなルートをリクエストできます。

次のチュートリアルでは、いくつかの例を挙げて、セグメントに関する情報を取得する方法とセグメントを回避する方法を説明します。

📘

回避対象として最大1,000個のセグメントを指定できます (POSTを使用)。最大250セグメントが通常のトランザクションの一部としてカウントされます。回避リスト内の251から500セグメントでは、月間トランザクション数に1つの追加のルート検索トランザクションが発生します。501から750セグメントでは2つの追加トランザクションが発生し、751から1000セグメントでは3つの追加トランザクションが発生します。

返されたルートのセグメントを回避する

span=segmentRef を指定してルートが計算される場合、返されるルート (図 1 の青色のライン) にはセグメント スパンのリストが含まれます。

セグメントを回避する

次のコマンドを使用して、指定した出発地と目的地の間のセグメント スパンのリストを計算できます。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=45.484661,9.228382&'\
'destination=45.485542,9.234576&'\
'return=polyline&'\
'spans=segmentRef&'\
'transportMode=car&'\
'apiKey=YOUR_API_KEY'

次のセグメントスパンのリストが返されます。

{
  "routes": [
    {
      "sections": [
        {
          "type": "vehicle",
          ...,
          "polyline": "BG8vl42CwvqzR8D4X0FgoB8Lk1B0FwbqEoR",
          "refReplacements": {
            "0": "hrn:here:data::olp-here:rib-2:3217:",
            "1": "here:cm:segment"
          },
          "spans": [
            {
              "offset": 0,
              "segmentRef": "$0:377570872:$1:76764732#+0.6376674544619554..1"
            },
            {
              "offset": 1,
              "segmentRef": "$0:377570872:$1:89214839#+0..1"
            },
            {
              "offset": 2,
              "segmentRef": "$0:377570872:$1:95058600#+0..1"
            },
            {
              "offset": 3,
              "segmentRef": "$0:377570872:$1:82740696#+0..1"
            },
            {
              "offset": 4,
              "segmentRef": "$0:377570872:$1:96835127#+0..0.626940133196055"
            }
          ],
          "transport": {
            "mode": "car"
          }
        }
      ]
    }
  ]
}

オフセット2のセグメントには、$1:95058600#+として指定されたsegmentIdと方向があり、これはrefReplacementパラメーターを使用してhere:cm:segment:95058600#+に変換されます。 このセグメントを両方向で回避する必要がある場合、ルートリクエストには、次のように、方向部分なしでavoid[segments]=here:cm:segment:95058600を含めます。

📘

refReplacementを使用した完全なHRNの構築の詳細は、HERE Map Contentのエンティティを参照のページで説明されています。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=45.484785,9.229564&'\
'destination=45.485299,9.232146&'\
'avoid[segments]=here:cm:segment:95058600&'\
'return=polyline&'\
'spans=segmentRef&'\
'transportMode=car&'\
'departureTime=any&'\
'apiKey=YOUR_API_KEY'

回避設定を使用して返されるルート (図1の紫色のライン) は、回避対象のセグメントを迂回します。

1つ以上のセグメントにわたる小さなルートを計算すると、それらのセグメントがルートの一部である場合、それらのセグメントのIDと方向を知ることができます。

特定の方向の地図のセグメントを回避する

ユーザーが特定の道路を特定方向に移動 (東から西へなど) するのを回避したいと考えているとします (図2を参照)。

ルート方向のセグメントを回避する

このセグメントを地図から取得すると (「セグメント」を参照)、ユーザーはセグメントID、関連するジオメトリー、開始ノード、終了ノードを取得します。

{
  "identifier": "here:cm:segment:95058600",
  "geometry": [
    {
      "latitude": 45.48495,
      "longitude": 9.23058,
      "z_level": 0,
      "elevation": 0
    },
    {
      "latitude": 45.48514,
      "longitude": 9.23143,
      "z_level": 0,
      "elevation": 0
    }
  ],
  "length": 69.72647,
  "startNode": {
    "identifier": "here:cm:node:66488603",
    "geometry": {
      "latitude": 45.48495,
      "longitude": 9.23058,
      "z_level": 0,
      "elevation": 0
    }
  },
  "endNode": {
    "identifier": "here:cm:node:66488604",
    "geometry": {
      "latitude": 45.48514,
      "longitude": 9.23143,
      "z_level": 0,
      "elevation": 0
    }
  }
}

セグメントの正の方向は、開始ノードから終了ノードへの移動方向と同じになります。 開始ノードの経度は終了ノードよりも小さいため、正の方向は西から東への移動方向になります。 このセグメントを東から西に移動しないようにするには、このセグメントを負の方向に移動しないようにします (avoid[segments]=here:cm:segment:95058600%23-)。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=45.485299,9.232146&'\
'destination=45.484785,9.229564&'\
'avoid[segments]=here:cm:segment:95058600%23-&'\
'return=polyline&'\
'spans=segmentRef&'\
'transportMode=car&'\
'departureTime=any&'\
'apiKey=YOUR_API_KEY'

POST リクエストを使用してセグメントを回避する

多くの avoid[segments] パラメーターを含むリクエストを送信すると、GET リクエストで許可される最大文字数を超える可能性があります。このような場合は、POST本体のavoidパラメーターを使用してPOSTリクエストを送信することができます。

このリクエストは、POSTボディの回避オプションにセグメントを追加し、その結果、ルートは橋を回避し (下の画像で強調表示されたセグメント)、より長いパスを取ることになります。

curl -gX POST 'https://router.hereapi.com/v8/routes?'\
'origin=52.517783,13.38846&'\
'destination=52.516158,13.402718&'\
'return=polyline,summary&'\
'transportMode=truck&'\
'vehicle[grossWeight]=20000&'\
'vehicle[height]=600&'\
'vehicle[trailerCount]=1&'\
'departureTime=2024-09-13T13:32:43+02:00&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "avoid": {
    "segments": [
      "here:cm:segment:141874221"
    ]
  }
}
'
回避セグメントを含むルート