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

ルート内のエリアを回避するには

avoid[areas]パラメーターを使用すると、指定したエリアを回避するルートを計算できます。

回避する 1 つ以上のエリアを区切り文字 |avoid[areas]={area1}[|{area2}[|{area3}...]] のように区切って指定できます。 avoid[areas]={area1}[|{area2}[|{area3}...]]

さらに、各回避エリアには 1 つ以上の exception エリアを指定できます。例外エリアは、関連付けられた回避エリアから除外されます。 avoid[areas]={area}!exception={area1}[!exception={area2}]...

次のエリア タイプがサポートされています。これらのエリア タイプは、回避するエリアまたは例外のいずれかとして使用できます。

  • bbox - 2 つの経度と 2 つの緯度で定義されるバウンディング ボックス。
  • polygon - 座標のリストとして、または Flexible Polyline でエンコードした文字列として定義されたポリゴン。
  • corridor - エリアを定義する半径をメートル単位で指定したポリライン。ポリラインは、座標のリストとして、または Flexible Polyline でエンコードされた文字列として定義できます。

指定されたエリアと車両のパラメーターによって、回避エリアを通過するルートしか選択できない場合、回避エリア内のルートの部分は最適ではない可能性があります。ルートが回避エリアを通過する可能性があるユースケースには次のものがあります。

  • 出発地の地域と目的地の地域を結ぶ唯一の橋が回避エリア内にあるため、代替ルートを計算できない。
  • 出発地、目的地、または中間経由地が回避エリア内にある。

小規模エリアと大規模エリアを回避する

  • パフォーマンスを考慮し、エリアの広さに基づいて特定のエリアを回避するためのさまざまなアルゴリズムが使用され、smallエリアとlargeエリアが区別されます。回避アルゴリズムは、小規模エリアに対しては セグメント ジオメトリー ベースの回避を実行し、大規模エリアに対してはセグメントジャンクション (開始/end) ベースの近似回避に切り替えます。
  • 小規模エリアに対するセグメント ジオメトリー ベースの回避では、エリア内に部分的に含まれるセグメントを回避できます。ただし、大規模エリアに対するセグメントジャンクションベースの近似回避では、エリア内に完全に含まれるセグメント、または開始ジャンクションまたは終了ジャンクションがエリア内にある場合にのみ回避されます。大規模エリアの近似回避アルゴリズムでは、エリア内に部分的に含まれるセグメントが回避されることがあります。ただし、すべてのケースでこれが保証されるわけではありません。したがって、大規模エリアを使用する場合は、回避する予定のセグメント全体をそのエリアでカバーすることが推奨されます。
  • 実用的な目的で、回避アルゴリズムは数ブロックの大きさ (縦横の幅と面積) に相当する地域をsmallエリアと見なします。たとえば、マンハッタンやシカゴの平均的な街区の大きさは約20,000平方メートルで、パリの街区は約5〜7ヘクタール、つまり50,000~70,000平方メートルです。小規模エリアは、スポーツイベントや政治集会などで混雑したり一時的に通行が規制されたりする可能性のある特定の街区、道路区間、交差点を回避するのに役立ちます。
  • 都市の近隣地域と同等の規模の地域 (ニューヨークのコブルヒルズ、ブルックリンハイツ)、制限区域 (ベルリンの環境ゾーン、ロンドンの超低排出ゾーン)、道路に沿った長いコリドー (数キロメートル)、行政区分 (自治区、地区、村、町、市、州) はすべて、largeエリアとして扱われます。
  • さまざまなエリアタイプ (バウンディングボックス、ポリゴン、コリドー) での小規模エリア回避と大規模エリア回避の操作に関する詳細については、「小規模エリアと大規模エリアを回避する例」を参照してください。

バウンディングボックスエリアを回避する例

このリクエストは、Tiergarten 公園のバウンディング ボックス エリアの通過を回避します。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=52.522297,13.353296&'\
'destination=52.508309,13.355633&'\
'transportMode=car&'\
'avoid[areas]=bbox:13.37588,52.51061,13.34226,52.51892&'\
'apiKey=YOUR_API_KEY'
バウンディングボックス回避エリア

結果として得られるルートは、指定されたエリアを回避するために迂回します。

ポリゴンエリアを回避する例

このリクエストは、Tiergarten 公園のポリゴン エリアの通過を回避します。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=52.522297,13.353296&'\
'destination=52.508309,13.355633&'\
'transportMode=car&'\
'avoid[areas]=polygon:52.518591,13.341621;52.52379,13.373352;52.511903,13.378032;52.506228,13.333503&'\
'apiKey=YOUR_API_KEY'
ポリゴン回避エリア

複数のエリアを回避する例

複数のエリアを回避するユースケースの1つは、旅程計画です。たとえば、ユーザーが時間や交通状況を考慮せずに将来の旅程計画を立てようとする場合でも、ほとんどの時間で交通量が多いエリアや安全に旅行できないエリアがあることを把握していることがあります。ユーザーは複数の回避エリア機能を使用して、そのすべてのエリアを回避できます。

このリクエストは、バウンディング ボックス エリア、コリドー エリア、ポリゴン エリアの 3 つのエリアを回避します。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=52.560708,13.375166&'\
'destination=52.591865,13.425968&'\
'return=polyline,summary,actions,instructions&'\
'transportMode=car&'\
'avoid[areas]=corridor:52.574814,13.389686;52.57986,13.397721;r=100|bbox:13.414203,52.584536,13.408161,52.588353|polygon:52.569582,13.403511;52.564922,13.407161;52.561504,13.411367;52.559166,13.412932;52.565349,13.412113;52.568835,13.411635;52.570998,13.410085&'\
'apiKey=YOUR_API_KEY'

画像から、このルートでは回避対象としてマークされたエリアを通らないことがわかります。

複数の回避エリア

回避エリアの例外の使用例

それぞれの回避エリアは 1 つ以上の exception エリアを使用して拡張できます。例外エリアは、関連付けられた回避エリアから除外されます。 avoid[areas]={area}!exception={area1}[!exception={area2}]...

このリクエストは、Tiergarten 公園内のポリゴン エリアの通過を回避しますが、この回避エリア内の特定のコリドーの通過は許可します。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=52.522297,13.353296&'\
'destination=52.508309,13.355633&'\
'transportMode=car&'\
'avoid[areas]=bbox:13.37588,52.51061,13.34226,52.51892!exception=corridor:52.52337773,13.35671004;52.51713813,13.35452568;52.51451650,13.35003559;52.50583814,13.35209860;r=100&'\
'apiKey=YOUR_API_KEY'
回避設定から除外された経路エリア

違反通知のある回避エリアの例

このリクエストは、目的地が回避エリア内にあるため、指定されたエリアの回避に失敗します。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=52.514647,13.387549&'\
'destination=52.516547,13.379095&'\
'transportMode=car&'\
'avoid[areas]=bbox:13.382279,52.51441,13.376397,52.518284&'\
'apiKey=YOUR_API_KEY'
違反エリアを回避する

次の応答では、violatedBlockedRoad コードを含む notice が指定されます。

{
  "routes": [
    {
      "id": "a394029a-06c3-4864-b46c-8296acfcf6a1",
      "sections": [
        {
          ...,
          "notices": [
            {
              "title": "Violated road that is blocked, due to a traffic incident, `avoid[areas]`, or `avoid[segments]`.",
              "code": "violatedBlockedRoad",
              "severity": "critical"
            }
          ],
          "transport": {
            "mode": "car"
          }
        }
      ]
    }
  ]
}

通知の詳細については、こちらのトピックを参照してください。

小規模エリアと大規模エリアを回避する例

エリアが小規模エリアとして処理されるか大規模エリアとして処理されるかは、エリアのバウンディング ボックスのサイズによって決まります。これは回避エリアと例外エリアの両方に当てはまります。たとえば、長くて狭いコリドーやポリゴンは、その向きに応じてバウンディングボックスが異なります。あらゆるエリアタイプ (バウンディングボックス、コリドー、ポリゴン) のバウンディングボックスは、それらが小規模エリアか大規模エリアかを識別するためにのみ使用されます。回避アルゴリズム (セグメントがエリアの内側にあるか外側にあるか) は、エリアのバウンディングボックスではなく、実際のエリアに基づいています。タイプbboxのエリアの場合、実際のエリアとエリアのバウンディングボックスは同じですが、corridorタイプおよびpolygonタイプの場合は必ずしも同じではありません (形状と向きによって異なるため)。

回避エリア、コリドーの向き、バウンディングボックス

このルートは、米国ニューヨーク州のブルックリン-クイーンズ高速道路上の長さ1,200メートルの区間 (緑のマーカーで強調表示) を通過します。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'apiKey=YOUR_API_KEY'
ブルックリン-クイーンズ高速道路を通るルート

次のセクションの例では、さまざまな種類とサイズの回避エリアを使用して強調表示されたセグメントを回避しようとした場合に何が起こるかを示します。

大きいbboxがセグメントを部分的にカバーする

このリクエストでは、セグメントを部分的にカバーするものの、ジャンクションはカバーしない大規模エリア (バウンディング ボックス) を使用します。これにより、ジャンクションベースの近似回避が使用されるため、セグメントは回避されません。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'avoid[areas]=bbox:-73.97213,40.675754,-73.97728,40.697551&'\
'apiKey=YOUR_API_KEY'
回避エリア、バウンディング ボックス、部分的

大きい bbox がセグメント ジャンクションをカバーする

このリクエストでは、セグメント ジャンクションをカバーする大規模エリア (バウンディング ボックス) を使用します。これにより、近似回避にジャンクションが使用されているため、セグメントが回避されます。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'avoid[areas]=bbox:-73.97728,40.675689,-73.98243,40.697486&'\
'apiKey=YOUR_API_KEY'
回避エリア、バウンディング ボックス、ジャンクション

小さい bbox がセグメントを部分的にカバーする

このリクエストでは、セグメントを部分的にカバーする小規模エリア (バウンディング ボックス) を使用します。これにより、正確なセグメント ジオメトリー ベースの回避が使用されるため、セグメントが回避されます。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'avoid[areas]=bbox:-73.97213,40.695409,-73.97728,40.696711&'\
'apiKey=YOUR_API_KEY'
回避エリア、バウンディング ボックス、小規模

大きいcorridorがセグメントを部分的にカバーする

このリクエストでは、セグメントを部分的にカバーする大規模エリア (長いコリドー) を使用します。これにより、ジャンクションベースの近似回避が使用され、セグメントジャンクションがカバーされていないため、セグメントは回避されません。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'avoid[areas]=corridor:40.687463,-73.990582;40.703992,-73.963288;r=50&'\
'apiKey=YOUR_API_KEY'
回避エリア、コリドー、部分的

小さい corridor がセグメントを部分的にカバーする

このリクエストでは、セグメントを部分的にカバーする小規模エリア (短いコリドー) を使用します。これにより、正確なセグメント ジオメトリー ベースの回避が使用されるため、セグメントが回避されます。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'avoid[areas]=corridor:40.695143,-73.977793;40.697095,-73.975132;r=500&'\
'apiKey=YOUR_API_KEY'
回避エリア、コリドー、小規模

大きい polygon がセグメントを完全にカバーする

このリクエストでは、セグメントを完全にカバーする大規模エリア (ポリゴン) を使用します。これにより、セグメント全体が回避エリア内になるため、セグメントは回避されます。

curl -gX GET 'https://router.hereapi.com/v8/routes?'\
'origin=40.697049,-73.989433&'\
'destination=40.699537,-73.942296&'\
'return=polyline,summary,actions,instructions&'\
'spans=notices,segmentRef,length&'\
'transportMode=car&'\
'departureTime=any&'\
'avoid[areas]=polygon:40.697557,-73.981282;40.68812,-73.981883;40.686754,-73.957078;40.697231,-73.956391&'\
'apiKey=YOUR_API_KEY'
回避エリア、ポリゴン、完全
📘

大規模エリアの近似回避アルゴリズムでは、エリア内に部分的に含まれるセグメントが回避されることがあります。ただし、すべてのケースでこれが保証されるわけではありません。大規模エリアを使用する場合は、次のことが推奨されます。

  • エリアが回避すべきセグメント全体をカバーすること。
  • エリアが回避すべきでないセグメントを部分的にカバーしないこと。
  • ジオメトリーが複雑なために、回避すべきでないセグメントが大規模エリアによって部分的に覆われてしまい、その結果セグメントが意図せず回避されてしまう場合は、例外のコリドーまたはポリゴンを使用すること。

POSTリクエストを使用してバウンディングボックスを回避する例

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

このリクエストにより、POST ボディの回避オプションに boundingBox エリアが追加され、ルートはより長いパス (画像内の青いパス) をたどり、より短いパス (画像内の紫色のパス) を回避するようになります。

curl -gX POST 'https://router.hereapi.com/v8/routes?'\
'origin=48.830254,2.352944&'\
'destination=48.837851,2.360125&'\
'return=polyline,summary&'\
'transportMode=scooter&'\
'departureTime=any&'\
'apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' -d '
{
  "avoid": {
    "areas": [
      {
        "type": "boundingBox",
        "west": 2.352272,
        "south": 48.830508,
        "east": 2.357164,
        "north": 48.833276
      }
    ]
  }
}
'
回避エリア、POST リクエスト

POST ボディの例外とともに他のタイプのエリアを指定する方法の例については、「API リファレンス」の、回避エリアの POST ボディの例を参照してください。