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

位置の参照

位置参照は場所を記述します。位置は、地表上の特定のポイント、曲線、または2次元の形状で示されます。位置がアプリケーションで使用される場合、道路、建物、山、海、川、湖などの特定の人為的または地理的な特徴を指すことがほとんどです。

HERE Traffic APIでは、位置参照は道路を示す位置に重点を置いています。

サポートされている3つの位置参照タイプは次のとおりです。

  • TMC (Traffic Message Channel)
  • OLR (OpenLR Location Referencing)
  • 形状ポイント
  • トポロジーセグメント

長さ

すべての位置参照タイプについて、lengthフィールドのLocationオブジェクトに位置参照の合計長が提供されます。

"length": 659.0

TMC

Traffic Message Channel (TMC) の位置参照方式では、事前に位置をコード化したテーブルが使用されます。詳細については、ISO 14819-2:2013およびISO 14819-3:2013の仕様を参照してください。

HEREのロケーションライブラリはTMCの位置参照をデコードできます。詳細については、ロケーションライブラリドキュメントの「TMC」を参照してください。

TMC情報はtmcフィールドに表示されます。

"tmc": {
    "extendedCountryCode": "E0",
    "ebuCountryCode": "D",
    "tableId": "1",
    "locationId": "10429",
    "queuingDirection": "-",
    "extent": 1,
    "primaryOffset": 0.0,
    "affectedLength": 634.0
}
📘

tmcフィールドのqueuingDirectionはTMCのトラフィックの列方向を表します。トラフィックに渋滞が発生すると、渋滞車両の列は走行方向と逆に伸びていくため、TMCの車両の列方向と走行方向は逆になります。値は「+」または「-」です。「+」の値は列方向がリンク方向と同じであることを示し、「-」の値は列方向がリンク方向と逆であることを示します。

TMCネットワークはすべての道路をカバーするわけではありません。TMC位置参照のみがリクエストされた場合、その位置をTMCで表す方法がないため、一部の結果が除外されることがあります。

OLR

OpenLR Location Referencing (OLR) メソッドは、マップ非依存の位置参照を生成するためのルールを定義します。つまり、実際の位置参照は動的に生成され、事前定義された位置参照を使用する必要はありません。

OLRは、TMC参照のように制限されたセットに限らず、あらゆる道路を参照できます。 詳細については、ISO/TS 21219-22:2017の使用を参照してください。

OLRは上記の仕様に記載されているバイナリ形式です。OLRデータはレスポンス内でBase64文字列でエンコードされます。Base64エンコーディングの詳細については、RFC 4648を参照してください。

HEREのロケーションライブラリはOLRの位置参照をデコードできます。詳細については、ロケーションライブラリドキュメントの「OLR」を参照してください。

OLR文字列がolrフィールドに入力されます。

"olr": "CCoBEAAmJQm+WSVVfAAJBQQCAxoACgUEAogZAAHtA2UACQUEAgOEADBigj0="

形状ポイント

形状ポイントの位置参照は、最も簡単な方法です。参照される地図の各リンクについて、形状はWGS84座標およびリンクのリンク長で記述されます。

📘

各リンクの形状ポイントは連続しており、そのリンクのポリラインを形成します。

ある位置が分割されたTMC (フォーク) からのものであったり、途中に通行不可能なリンクがあったりするために、返されたリンクが連続していない可能性があります。

形状ポイントの位置参照に対して返されるリンクは連続しているとは限りません。リンクの最後の形状ポイントが次のリンクの最初の形状ポイントと同一でない場合があります。

形状ポイントはshapeフィールドに表示されます。

"shape": {
    "links": [
        {
            "points": [
                {
                    "lat": 52.501569986343384,
                    "lng": 13.702660035341978
                },
                {
                    "lat": 52.50179001130164,
                    "lng": 13.702860027551651
                },
                {
                    "lat": 52.501959996297956,
                    "lng": 13.703020038083196
                }
            ],
            "length": 50.0,
            "functionalClass": 3
        },
        {
            "points": [
                {
                    "lat": 52.501959996297956,
                    "lng": 13.703020038083196
                },
                {
                    "lat": 52.502879993990064,
                    "lng": 13.703829981386662
                }
            ],
            "length": 116.0,
            "functionalClass": 3
        },
        {
            "points": [
                {
                    "lat": 52.502879993990064,
                    "lng": 13.703829981386662
                },
                {
                    "lat": 52.50310001894832,
                    "lng": 13.704029973596334
                },
                {
                    "lat": 52.504169968888164,
                    "lng": 13.704979978501797
                }
            ],
            "length": 163.0,
            "functionalClass": 3
        },
        {
            "points": [
                {
                    "lat": 52.504169968888164,
                    "lng": 13.704979978501797
                },
                {
                    "lat": 52.504879999905825,
                    "lng": 13.70560996234417
                },
                {
                    "lat": 52.50540001317859,
                    "lng": 13.706069961190224
                },
                {
                    "lat": 52.505700001493096,
                    "lng": 13.70631999336183
                },
                {
                    "lat": 52.50596000812948,
                    "lng": 13.706470029428601
                },
                {
                    "lat": 52.50616000033915,
                    "lng": 13.706549992784858
                },
                {
                    "lat": 52.50644003972411,
                    "lng": 13.706600032746792
                },
                {
                    "lat": 52.50668001361191,
                    "lng": 13.706589974462986
                },
                {
                    "lat": 52.50691001303494,
                    "lng": 13.706559967249632
                }
            ],
            "length": 330.0,
            "functionalClass": 3
        }
    ]
}

トポロジーセグメント

トポロジーセグメント参照は、HERE Map Contentトポロジーセグメントへの一連の参照によって位置を定義します。

セグメント参照の標準表現には、次の構造があります。

{catalogHrn}:{catalogVersion}:({layerId})?:{tileId}:{segmentId}(#{direction}({startOffset}..{endOffset})?)?

レスポンス構造には、開始オフセットから終了オフセットまでのトポロジーセグメントの長さを表すlengthフィールドも含まれます。

個々の部分は次のとおりです。

  • catalogHrn:セグメントのソースカタログを識別するHERE Resource Name。例:hrn:here:data::olp-here:rib-2
  • catalogVersion:カタログのバージョン
  • layerId (任意):セグメントが存在するカタログ内のレイヤー。例:topology-geometry
  • tileId:指定されたバージョンのカタログでセグメントが配置されているパーティション/タイルのHERE Tileキー。これは実際のセグメントが格納されているよりも低いレベルに設定できます (たとえば、topology-geometryパーティションがレベル12でタイル化されている場合でも、指定されたタイルIDはレベル14にできます)。HERE Tileキーのレベルは、バイナリ表現における最上位のセットビットの位置によって示されます。HERE TileキーはタイルIDのxとyの部分のモートンコードを表しているため、レベル14のタイルIDから最下位の4ビット(またはレベルあたり2ビット)または16進数の1桁を削除することで、レベル12タイルIDを取得できます。たとえば、レベル14のタイル377894441は、レベル12のタイル23618402に含まれます(37789444110 = 1686362916 → 168636216 = 2361840210)。
  • segmentId:カタログ内で参照されるトポロジーセグメントの識別子。例:here:cm:segment:84905195
  • direction (任意):方向なしまたは双方向の「*」、正の方向の「+」、負の方向の「-」、方向不明の「?」(ルーティングサービスでは使用されません) のいずれか
  • startOffset/endOffset (任意):開始オフセットと終了オフセットは0から1の間の正の数であり、セグメントの長さの割合を使用して参照範囲の開始と終了を表します。0はセグメントの始点を表し、1は指定された方向 (方向が指定されていないセグメントであれば正の方向) を基準にしたセグメントの終点を表します。例:0.7..1

セグメント参照は、レスポンスサイズを小さくするためにコンパクトな表現で提供することもできます。コンパクト表示では、一部がプレースホルダーに置き換えられます。プレースホルダーは親セクションのrefReplacements辞書を使用して解決できます。

プレースホルダーの形式は\$\d+であり、コロンで囲むかstart/endを文字列にする必要があります。これは、以下の正規表現でキャプチャーできます: (^|:)\$\d+(:|$)/

📘

この形式はRouting APIでスパン内のセグメント参照をリクエストするときに使用されるのと同じものです。

トポロジーセグメント参照はsegmentRefフィールドに入力され、置換文字列はrefReplacementsフィールドに入力されます(リクエストされた場合、HERE Map Contentトポロジーセグメント参照のコンパクトな表現に使用されます)。

コンパクト表示でのセグメント参照の例:

"segmentRef": {
    "segments": [
        {
            "ref": "$0:377894504:$1:87964630#-0.77195..0.99348",
            "length": 47
        },
        {
            "ref": "$0:377894504:$1:82804623#-0..0.08525",
            "length": 21
        }
    ]
}

refReplacementsフィールド:

"refReplacements": {
    "0": "hrn:here:data::olp-here:rib-2:5447:",
    "1": "here:cm:segment"
}

refReplacementsを使用しない標準表現でのセグメント参照の例:

"segmentRef": {
    "segments": [
        {
            "ref": "hrn:here:data::olp-here:rib-2:5447::377893833:here:cm:segment:661789549#-0.58984..1",
            "length": 28
        }
    ]
}