ルート沿いの検索方法

/autosuggest/discover/browse およびエンドポイントは、オプション route のパラメータを使用したルートのユースケースに沿った検索をサポートします。 検索結果は、次の 2 種類の距離要素で返されます。

  • distance: ルートに沿った合計距離にルートから結果までの距離を加えた距離
  • excursionDistance: ルートから結果までの距離。

ルート定義

routeパラメータ値の形式は、 HERE フレキシブル折れ線の形式 です。指定したルートからの幅をメートル単位で指定する追加のオプションwパラメータを使用して拡張されます。

パラメータの値 w は、検索結果とポリラインの間の「カラスが飛ぶような」の最大距離です。 結果:検索結果が見つかるコリドーのポリゴンの幅が合計 2*wになります。 ポリラインと幅の組み合わせがコリドーを形成し、すべての検索結果が定義されたコリドーに限定されます。 distance このフィールドの値は、ポリラインに沿った距離の合計に、ハエが進むときのポリラインから結果までの距離を加えたものです。 その距離 l1+l2+l3 は次の図のとおりです。

l3 その点に注意してください

  • l3 は常にのようになります l3 < w
  • excursionDistance 応答要素がと同じです 2*l3
ポリライン、コリドー、幅、距離
図 1. ポリライン、コリドー、幅、距離

幅のデフォルト値 w は 1000 (メートル)です。 URL の長さ 2048 バイトに準拠するように、ルートポイント数を 300 未満にすることをお勧めします。

/discover を使用するアプリケーション は、ベルリンからハンブルグへの定義済みルートの「レストラン」について、そのルートの位置52.5308,13.3847で、そのルート沿いに幅 1000 メートルの次のクエリを送信します。


https://discover.search.hereapi.com/v1/
discover?apiKey={YOUR_API_KEY}
&at=52.5308,13.3847
&limit=10
&route=BF0-zgKyl2xCvCrJ2mBtwBwY9kB2xEthIyYrjDuBjlBoOpEoLNoJzE0I9KkPjeiI5JwrDzoCqdtc8H1NgKtjBsM1WuQ_yB2alkCuGlK8EpDuFUiPgV-HT0LpOkJDmD5B2dnnBmI_G8J_D0zEmW4RbiSzD6N3EuUtKqS9MsOjNsZneiyC1oE8RxY8hB1iB8tBjesJzJ8HhOuErPmC1W1FxjBzB7YD3kGiK5iFaty
BvEzlC7Nj_D1B7lBgB3rBiGj5Bq8B7tL-YhjHsM_6BiSt2Bi8Cv7F0SrrBwO_nBoMtnBiN7zBggBzuFqRrqC-LvmB8QzsB4hBrkCohB_xBkiBxnBqhBvd4hBrW2lBpRsnB_JysB1DizDhBkYlE6a3JqW3M6ZvU2pC5tC6oBziB8uB3c2kF51C4XvPyT_QmhBpnB45Bt7CmnC31CuW5f0NjYwOtfiqBn2DiVhtBoWxjB09Bjw
C-zBx5C-brmBmczcg1BruB0apbklEtiFkjB1nBwiBlhB4_BtzB8X3XyZ9hBm4Bn6CwiB7oBoWxTkZzQszCzlBuWzMge1WoclckZpgBgcxuBu1Bl3DgTnmBwaloB8V9YkbjXgb9PsKZuGwCmRgRsI4DqL1B-J3I8F_K0D5NsFtvCkJ77B2K5uB4PtyBsO7jBgVnqBqTtf6gBrtBkYtpB2Y12BqS92BuKnpBqJ5yByPt9E6Jxh
CwQ9jCmSj1ByWryBmattBqRxY4xBh9BojB33BqwElzIqV_wBwbhtCkXnzByZzrBg4BnxCymB5oCsbhiCsY3rCmNj0B2mBpwF4NhxBqXn9BkkBhrCiZ1lCqNr0B-Jz0BgMnzC4Gt-BsGrxDkC1yIqF7jCsLpnCgJlnB-NhvBkP3oBmQrkBge71B23BhuC0Std-SljBgU3tBkW_jC2gBzwEglB94D4MzhC0L9vDoNtnCyU_kC
ufpqCwQhuB0MjvBkKj1BqFhrBmDpyBqCzjIoChlC4HhpC4NnkCmRn5BgU5xBoVzpBigBzyB2QlewQ7lB0cpxCiO9gBqS_hBgkB72BiSxf0Q_kB8M9kB-dp5D-e33C0OnyByLzyByJ17BiGnjCqBrhC7BxvB3K1_DFxqC-Hp9C0I1zB-JjsB4WtqC0drlCmWzoB03CrrEqR9gB8P5kBqVxhCwShyCkN3tB6O_nBqdpjC6Qtx
BiOx5B6Ir2BoF99BM3zBxCzwBtMl0DlBzyBuCn6B-zB1nM4T_6G0FtuE8EzlCmjC7hS2GzsCqI3yF_G7-F0D54J0FzwC2O35Cw2Cv-K8xB9xHmUhpC6pBlgE6QtrC2JlqCwF9wCS1lCvCj9DwC52BuV54DsK_1D2WrjDuO7hEmenwEqIzkCmB32BjD_yBtzB_pL1EjvB_BhtB-B3iCkR3pGvBpkBnM1oDL5wB-Gv2B4iB_zE
qFjsBsC9vBnCtlCvNrxErtBrlJ1HnsDb3oB2CppBkZnkEgB_V1B_kB1DjRpH3R1JtP_M9NvWzO55B7XxYnPnchXlpBjoBnhBnrBriB97BpbjhClOtrBzOt3BjH1xBoB5hBgLzpC2DtvFqD5N6G_I85B51BwUvRoLtE2KiD4MwHqnBgkB8UqQ0EuCiChBkL_ZmIpjBuNtlBuN9R6CrMWjkB2MyB6RvH6TjiB2GnY0B9R7I5E9
I9H3CNhDyF;w=1000
&q=restaurant

このクエリは、次の応答を返します。

{
  "items": [
    {
      "title": "Cô Chu",
      "id": "here:pds:place:276hzqom-a51495c57f0210dc85fd26e4b796f449",
      "resultType": "place",
      "address": {
        "label": "Cô Chu, Invalidenstraße 29, 10115 Berlin, Deutschland",
        "countryCode": "DEU",
        "countryName": "Deutschland",
        "state": "Berlin",
        "county": "Berlin",
        "city": "Berlin",
        "district": "Mitte",
        "street": "Invalidenstraße",
        "postalCode": "10115",
        "houseNumber": "29"
      },
      "position": { "lat": 52.53112, "lng": 13.38471 },
      "access": [{ "lat": 52.53104, "lng": 13.38476 }],
      "distance": 36,
      "categories": [{ "id": "100-1000-0000" }],
      "foodTypes": [{ "id": "200-000" }, { "id": "206-000" }]
    },
    {
      "title": "Bangaluu-Private Dining",
      "id": "here:pds:place:276u33db-6943d7dab85640d3bf84eb810a46b6c3",
      "distance": 34,
      ...
    },
    ...
    {
      "title": "Bio Company Chausseestraße",
      "id": "here:pds:place:276u33db-7be18fbf70df4a53ad7013794b014fea",
      "distance": 119,
      ...
    }
  ]
}

ルートの単純化

HERE Routing API のような業界をリードするサービスによって返されるルートは、非常に詳細に記述されています。 たとえば、ベルリンとハンブルクを結ぶルートの柔軟なポリライン文字列 は約18K バイト(約 4000 ポイント)です。 /discover/autosuggestまたは/browseHERE Geocoding and Search でサポートされている最大 URL 長の 2048 バイトに適合するように、またはこのようなルートで使用するには、幾何学的に簡素化する必要があります。 このためには、開発者は 一般的な複雑さO(n logn)を提供する Ramer – Douglas – Peuckerアルゴリズムを検討する必要があります。

上記の例で使用されているフレキシブルなポリラインは、ベルリンからハンブルグへのルートのために HERE Routing API が返したポリラインに適用された Ramer – Douglas – Peucker の単純化の結果であることに注意してください。 epsilon1769 バイトの長さに達するために使用されたはでし 0.0002た。

長いルートの場合 epsilonは、増加する必要があります。 たとえば、ニューヨーク市とロサンゼルスを結ぶルートについて、 HERE Routing が返したポリライン 200K の文字数は約文字です。 の Epsilon 0.015 では、サイズを 1494 バイトに縮小できます。

ルートの例
ポリラインの長さ ポイント数 イプシロン 削減されたポイント数 簡素化されたポリラインの長さ
ベルリン / ハンブルク 18 、 000 円 4K 0.0002 368 1769
ハンブルグ / マルセイユ 104K 23k 0.005 299 1751
ニューヨーク / ロサンゼルス 199k 42k 0.015 235 1494

HERE Routing API によって提供されるルートの単純化ワークフローは、次のようになります。

  1. 柔軟なポリラインデコード機能により、地理座標の行文字列を作成
  2. 行文字列の単純化
  3. 短い柔軟性のあるポリラインへの行文字列のエンコードを簡素化

たとえば、 HERE flexible-polyline パッケージおよび Stephan H ü gel ( MIT ライセンス)によって開発された簡素化パッケージを使用する Python スクリプトは、次のようになります。

from flexpolyline import decode, encode
from simplification.cutil import simplify_coords

def simplify(flex_polyline: str, epsilon: float) -> str:
    decoded = decode(flex_polyline)
    simplified = simplify_coords(decoded, epsilon)
    return encode(simplified)

」に一致する結果は 件です

    」に一致する結果はありません