HERE Map Content スキーマ

モデルを参照するトポロジーアトリビューション

すべてのロードレベルのアトリビューションは、属性値に関係なく、整合性のある参照モデルからの道路ネットワーク に関連付けられます。 このモデルは、属性値がトポロジレイヤーのセグメントおよびノード構造にどのように関連するかを示します。

NodeAnchor

NodeAnchor は、アトリビューションを交差ノードまたは独立ノードにバインドするメカニズムで、そのノードへの参照のみを含みます。 これは、共通のモデル anchor.proto で構成されています。

次の例では、属性をノードに割り当てる方法を指定します。
message NodeAnchor { common.v1.Reference node_ref = 1; } 

ノードの内外のパスに関係なく、 NodeAnchor に属性を適用できます。

図 1. 節点の交差の例

SegmentAnchor

SegmentAnchor は、アトリビューションを 1 つ以上のセグメントに沿った範囲にバインドするメカニズムです。 SegmentAnchor が単一のセグメントを参照する場合、範囲はセグメントに沿った線形の割合を表すことも、開始パーセンテージが終了パーセンテージと等しいセグメント上の点を表すこともできます。 単一セグメントの SegmentAnchors は、機能クラスなどのアトリビューションのほとんどに利用されます。

開始 / 終了オフセットは、リンクジオメトリの長さの比率として解釈されます。この比率は、 WGS84 参照楕円体のポイント単位の最短距離の合計で表され、 Vincent の式で近似されます。

SegmentAnchors は、制限された運転操作など、複数の連続するセグメントにまたがるアトリビューションを表現する必要がある場合にも、複数のセグメントにすることができます。 SegmentAnchor モデルには、次の追加の詳細情報があります。

  • 1 つ以上のセグメントの線形チェーンに属性を割り当てる方法を指定します。
  • 線形チェーンは、内部の自己交差なしに幾何学的にエンドツーエンドで接続する一連のセグメントです。
  • 線形チェーンはループを形成できます。この場合、チェーンの最初と最後のノードは同一のノードになります。

一般に、 SegmentAnchor は複数セグメントのチェーンとして、各構成要素セグメントの最初から最後までの方向とは独立した、全体的な最初から最後までの方向を持ちます。 チェーン内の各構成部品セグメントは、チェーンと同じ最初から最後の方向を持つか、またはチェーンを基準にしてその方向が反転されます。 各構成要素セグメントの方向を、 SegmentAnchor のベースとなっているチェーンの全体的な方向と区別することが重要です。

たとえば、セグメントチェーンの最初のノードが、そのチェーンの最初のセグメントの最後のノードである可能性があります。 同様に ' チェーンの最後のノードを ' チェーンの最後のセグメントの最初のノードにすることができます 単純なケースは、単一のセグメントで構成されます。 この場合、チェーンとセグメントの方向は常に同じになり、範囲のオフセットが最初のセグメントに自然に適用されます。

複数セグメントの場合、チェーンの向きは個々のセグメントの向きとは無関係です。
message SegmentAnchor
(任意)値の範囲は( 0.0 ~ 1.0 )です。 存在しない場合、オフセット は範囲の開始位置にあります (0.0 のように ) 。 開始セグメントの方向を基準にしています。これは必ずしも全体的なチェーンの方向とは限りません。
google.protobuf.DoubleValue first_segment_start_offset = 1
アンカー内のセグメントは常に >= 1 になります。
repeated OrientedSegmentReference oriented_segment_ref = 2
(任意)値の範囲は [0.0 ~ 1.0] です。 存在しない場合、オフセット は範囲の最後にあります (1.0 のように ) 。 最後のセグメントの方向を基準にしています。これは必ずしもチェーン全体の方向であるとは限りません。
google.protobuf.DoubleValue last_segment_end_offset = 3
チェーンの最初から最後の方向を基準とした属性の方向。
common.v1.RelativeDirection attribute_orientation = 4
message OrientedSegmentReference
反転したセグメントを参照しています。
 bool inverted = 2
属性は、次のように定義された SegmentAnchor に適用できます。
  • 連続するセグメントの順序付きリスト。
  • リストの最初と最後のセグメントは、「開始からの距離」指示から部分的に含めることができます。
  • セグメントの移動方向には、順序付けられたリスト全体を通過するトラフィックフローが含まれている必要があります。
図 2. SegmentAnchor の例

アンカープールの属性使用

属性メッセージは 、その 属性値がそのパーティション で適用されるすべてのノードまたは SegmentAnchors 、またはそのいずれかを参照するためのプール規則を利用します。 そのため、各一意の属性値はパーティション ごとに 1 回だけパブリッシュされ、 1 つ以上のノード / セグメント参照を持ちます。 たとえば、次の例では、制限速度属性を使用しています。

図 3. 制限速度属性を使用したアンカープール
segment_anchor:
[
  {
    segment_ref: 123
    range: (0.0, 0.5)
  },
  {
    segment_ref: 123
    range: (0.5, 1.0)
  },
  {
    segment_ref: 456
    range: (0.0, 1.0)
  }
]
speed_limit:
[
  {
    segment_anchor_index: 0, 2
    value: 45
  },
  {
    segment_anchor_index: 1
    value: 55
  }
]

特定のセグメント ID に沿った点の属性を検索するには、 SegmentAnchors を検索して一致するセグメント ID と範囲を探し、それに対応するインデックスを SegmentAnchors の全体的なリストに記録します。 SegmentAnchor インデックスを使用して、属性値メッセージのリストを検索し、特定の SegmentAnchor インデックスに対応するメッセージを探します。