TMC リファレンスの操作
このreferencing
モジュールには、 Optimized Map for Location Library 頂点への位置参照の変換 ( 参照解決 ) および Optimized Map for Location Library 頂点からの位置参照の作成 ( 参照作成 ) を可能にするインターフェイスとクラスが含まれています。
このモジュールでは、以下に詳述する TMC および拡張 TMC 位置参照方法をサポートしている。
注 : TMC 実装の制限
TMC 位置参照の基本的な実装は、最大 extent
1 つの参照を解決および作成することに限定されています。 リファレンス extendedCountryCode
も解決するには有効なものが必要です。
より大きい extent
を持つ参照を解決または作成する TmcAdjacencyProvider
には、を渡す必要があります。 インスタンスは、のファクトリメソッドから取得
TmcAdjacencyProviders
できます。
位置参照を使用するには、プロジェクトの依存関係にモジュールを追加する必要があります。
libraryDependencies ++= Seq(
"com.here.platform.location" %% "location-referencing" % "0.21.788"
)
<dependencies>
<dependency>
<groupId>com.here.platform.location</groupId>
<artifactId>location-referencing_${scala.compat.version}</artifactId>
<version>0.21.788</version>
</dependency>
</dependencies>
dependencies {
compile group: 'com.here.platform.location', name: 'location-referencing_2.12', version:'0.21.788'
}
位置参照を解決しています
インターフェイス LocationReferenceResolver
は、位置参照を解決するためのメソッドを提供します。 インターフェイスのインスタンスは、ファクトリオブジェクトを介して作成 LocationReferenceResolvers
できます。
対応するインターフェイス LocationReferenceCreator
には、位置参照を作成するために必要なメソッドがあります。 タイプのインスタンスは、ファクトリオブジェクトを介して作成 LocationReferenceCreators
できます。
これらのファクトリオブジェクトは、ライブラリでサポートされているすべての異なる位置参照タイプのファクトリを提供します。
以下のスニペットでは、 TMC リゾルバーの作成方法、およびこのリゾルバーを使用して既存の TMC 位置参照を解決する方法について説明します。
メモ : v2 のスニペット
新しい dcl2 ベースのスニペットは 、 v2 タブで利用できます。 最適化されたマップインスタンスの作成方法については、「
位置情報ライブラリ用に最適化されたマップ」セクションのバージョンを参照してください。
import com.here.platform.location.referencing._
import com.here.platform.location.tpeg2.tmc.TMCLocationReference
val tmcReference: TMCLocationReference = getTmcLocationReference
val tmcResolver: LocationReferenceResolver[TMCLocationReference, BidirectionalLinearLocation] =
LocationReferenceResolvers(optimizedMap).tmc
val location: BidirectionalLinearLocation = tmcResolver.resolve(tmcReference)
println(s"""Vertices in the:
| - location: ${location.location.path}
| - opposite location: ${location.oppositeLocation.map(_.path)}
|""".stripMargin)
import com.here.platform.location.referencing.BidirectionalLinearLocation;
import com.here.platform.location.referencing.LocationReferenceResolver;
import com.here.platform.location.referencing.javadsl.LocationReferenceResolvers;
import com.here.platform.location.tpeg2.tmc.TMCLocationReference;
final TMCLocationReference tmcReference = getTmcLocationReference();
final LocationReferenceResolver<TMCLocationReference, BidirectionalLinearLocation> tmcResolver =
new LocationReferenceResolvers(optimizedMap).tmc();
final BidirectionalLinearLocation location = tmcResolver.resolve(tmcReference);
System.out.println("Resolved location: " + location);
TMC 位置参照は、同時に線形位置の正および負の方向を参照できます。 したがって、 TMC リゾルバーは A を返し BidirectionalLinearLocation
ます。
位置参照を作成しています
このインターフェイス LocationReferenceCreator
では、位置参照を作成するメソッドが提供されます。 インターフェイスのインスタンスは、ファクトリオブジェクトを介して作成 LocationReferenceCreators
できます。
以下のスニペットでは、 TMC 作成者を作成する方法と、その作成者を使用して TMC 位置情報参照を作成する方法について説明します。 TMC 位置参照では、事前にコード化された参照スキームが使用されます。したがって、 TMC テーブルでカバーされているパスの参照のみを作成できます。
import com.here.platform.location.referencing._
import com.here.platform.location.tpeg2.XmlMarshallers
import com.here.platform.location.tpeg2.lrc.LocationReferencingContainer
import com.here.platform.location.tpeg2.tmc.TMCLocationReference
val location: LinearLocation = findLinearLocation(optimizedMap)
val tmcRefCreator: LocationReferenceCreator[LinearLocation, TMCLocationReference] =
LocationReferenceCreators(optimizedMap).tmc
val tmcRef: TMCLocationReference = tmcRefCreator.create(location)
XmlMarshallers.locationReferencingContainer
.marshall(LocationReferencingContainer(Seq(tmcRef)), Console.out)
import com.here.platform.location.referencing.LinearLocation;
import com.here.platform.location.referencing.LocationReferenceCreator;
import com.here.platform.location.referencing.javadsl.LocationReferenceCreators;
import com.here.platform.location.tpeg2.XmlMarshallers;
import com.here.platform.location.tpeg2.lrc.LocationReferencingContainer;
import com.here.platform.location.tpeg2.tmc.TMCLocationReference;
import java.util.Collections;
final LinearLocation location = findLinearLocation(optimizedMap);
final LocationReferenceCreator<LinearLocation, TMCLocationReference> tmcRefCreator =
new LocationReferenceCreators(optimizedMap).tmc();
final TMCLocationReference tmcRef = tmcRefCreator.create(location);
XmlMarshallers.locationReferencingContainer()
.marshall(new LocationReferencingContainer(Collections.singletonList(tmcRef)), System.out);
経路が TMC によって完全にカバーされていない場合、または 1 つの TMC 基準でカバーされていない場合、経路は TMC の 1 つの線形位置をたどるものではないため、を使用 piecewiseExtendedTmc
することができます。 複数の TMC 参照と、各参照によってカバーされている線形の位置を返すことができます。
TMC の仕組み
このセクションでは、 TPEG2 メッセージに埋め込むことができる TMC および拡張 TMC 位置情報についての詳細を説明します。 最初 のパートでは、 TMC の位置および位置表の概念について説明します。
2 番目のパート では、これらを使用して道路ネットワークのパスを参照する方法について説明します。
TMC の位置情報
トラフィックメッセージチャンネル( TMC )の位置参照方式では、事前にコード化された位置の表が使用されます。 TMC ではさまざまな種類の位置コードが定義されていますが 、ポイントおよびリニア位置コードは道路ネットワークの位置を参照するために使用されるため、特に注意が必要です。
線形 位置コードは、主要道路またはこれらの道路のより長いサブセクションを参照します。 ポイント の位置コードは、別の道路と交差する場所など、出口や入口が含まれる道路の短距離を指します。
TMC でコード化された 2 つの道路が交差する場合、各道路の視点から 1 つずつ、それらの交差点を記述する 2 つのポイント位置コードが存在します。 たとえば、 Frankfurter Kreuz ジャンクションでは、高速道路 A3 と A5 が交差しています。 ドイツ向け TMC テーブル ( バージョン 18) の現在のバージョンには、このジャンクションの 2 つのポイント位置コードがある。 10871 を A3 の Frankfurter Kreuz 、 11623 を A5 の Frankfurter Kreuz に。
TMC でコード化された道路ごと に、 1 つの方向が正の方向に指定され、反対の方向が負の方向に指定されます。
位置コードには、道路の正の方向に沿って、前と次のコード化された位置への参照が含まれている可能性があります。 次の位置コードは 正のオフセット、 前のコードは 負のオフセットと呼ばれます。 ( この「オフセット」の使用方法は、ややわかりにくい場合があります。 ポイントの位置がリンク済みリストの一部であると考えると便利です。オフセットは、各方向の次のノードへのポインタになります)。
各 TMC コードには、実際には 4 つの論理的な道路セクションが関連付けられている。 正および負の各方向の内部および外部の道路セクション。 ポイント位置の内部道路セクションは、交差点のエリア内にある道路のセクションです。このセクションは、その交差点に含まれる多くのエントリおよび出口の最初と最後の間にあります。 外部 道路セクションは、内部セクションに向かう道路の一部です。
上記のフランカークロイツの例では、 TMC ポイント位置コード 10871 は、東西高速道路 A3 の一部を表しており、南北高速道路 A5 とのクローバーリーフの交差点に位置しており、ウエストバウンド方向は正の方向にコード化されている。 交差点には、 A3 の各方向と相互に作用する 4 つのランプがあります ( オフランプと、 A5 の各方向を行き来するオンランプ ) 。 指定された方向の内部セクションは、最初のオフランプと最後のオンランプの間の高速道路の伸びです。 位置コード 10871 の外側の正の部分は、 A3 のウエストバウンド部分で、その方向の前のポイントの内部セクションの間にあります ( 位置コード 10871 の負のオフセット: 位置コード 59628 )と高速道路 B との交差点の内部、および位置コード 123 の外側のマイナス部分は、その方向の前のポイント位置(位置コード 10872 )と高速道路 B との交差点の間の A3 の東行きの部分になります
特定の国に複数の TMC 位置表を定義できます。 たとえば、国によって、場所の種類や管理エリアごとに異なるテーブルが使用されている場合があります。 特定の国の場合、各テーブルに番号が割り当てられます。 テーブルを一意に識別するには、国とテーブル番号の両方を指定する必要があります。
歴史的な理由から、トヨタは国を特定するための 2 つのメカニズムを持っている。 各国に は国コードが割り当てられます。国コードは、 1 つの 16 進数 (1 ~ F) で表されるゼロ以外の 4 ビットの数値です。 これは、国境エリアでの無線ブロードキャストが近隣の国を区別するのに十分ですが、国ごとに一意のコードを割り当てるための一意の値が不足しているため、国コードが国を一意に識別するものではありません。 各国に は、 2つの 16 進数で表される 8 ビットの数字である拡張国コードも割り当てられます。 申し訳ありませんが、拡張国コードの用途は重複していますが、国コードと拡張国コードを組み合わせることで、国が一意に識別されます。
TMC 位置参照は、特定の表および位置コードを参照します。 正しく動作するには、 TMC 参照の送信者と受信者が同じ位置テーブルを共有する必要があります。 これにより、 TMC 基準が非常に小さくなります。 ただし、すべての場所が事前にコード化されているわけではないため、 TMC 位置参照を使用して参照できない場所があります。
TMC 位置情報参照
TMC 位置情報は、常に TMC 位置情報コードを中心に構築されている。 コードを一意に識別するには、国コード、拡張国コード、テーブル番号、およびコード自体を入力する必要があります。 ( 拡張国コードは TPEG 形式ではオプションですが、常に存在することが予想されます ) 。 参照で明示的に指定されている場所コードを プライマリの場所と呼びます。
参照は エクステントも指定します。 エクステントを使用すると、参照に関連する先行する位置コードの整数数を定義することで、複数の道路セクションにまたがる位置を指定できます。 このような最も遠い場所のコードは 、セカンダリの場所と呼ばれています。 慣例により、交通はセカンダリの場所からプライマリの場所に移動します。
方向(正または負)をブール型値として指定する必要 があります。true
は正を意味し、false
は負を意味します。 値 HERE は、プライマリロケーションからセカンダリロケーションまでの移動方向です。 トラフィックフローはセカンダリロケーションからプライマリロケーションに向かうため 、方向指示灯はトラフィックフローとは反対の方向にあります。
たとえば、 TMC テーブルに以下のエントリが含まれているとします。参照のプライマリロケーションコードは 8 で、エクステントは 4 です。 方向が false の場合は、負のオフセットに従い、セカンダリの位置コードは 2 になります。 方向が true の場合、正のオフセットに従い、セカンダリの位置コードは 14 です。
場所コード | 負のオフセット | 正のオフセット |
2 | ( なし ) | 4 |
4 | 2 | 6 |
6 | 4 | 8 |
8 | 6 | 10 |
10 | 8 | 12 |
12 | 10 | 14 |
14 | 12 | 16 |
エクステントが 0 の場合、セカンダリロケーションはなく、プライマリロケーションの内部セクションのみが参照に含まれます。 プライマリロケーションの外部セクションは含まれません。
エクステントが 1 より大きい場合、プライマリロケーションとセカンダリロケーションの内部セクションと外部セクション、およびその間のすべてのロケーションコードが考慮されます。
- セカンダリロケーションの外部パーツが除外されます。
- セカンダリロケーションの内部部分の包含 / 除外について、以下で説明します。
- 一次ロケーションと二次ロケーションの間のコードのすべての外部パーツおよび内部パーツが含まれます。
- プライマリ保管場所の外部品目が含まれます。
- セカンダリロケーションの内部部分の包含 / 除外について、以下で説明します。
TPEG2 には、実際には TMC 位置参照を定義する 2 つの部分があります。 パッケージ内のコードで表される古い TMC Location Referencing ( TMC ) tmc
、 etl
およびパッケージ内のコードで表される新しい Extended TMC Location Referencing ( ETL )。 これらのパッケージには、という名前のクラスがあり TMCLocationReference
ます。 etl
TMC 参照のバージョンでは、セカンダリロケーションの内部セクションを含めるかどうか、およびプライマリロケーションの内部セクションを含めるかどうかを明示的に指定できます。 tmc
バージョンでは、これらの指定は許可されていません。セカンダリロケーションの内部セクションは常に除外され、プライマリロケーションの内部セクションは常に含まれます。 etl
次の表に、フラグが参照先の場所に与える影響を示します。
エクステント | プライマリ内部を使用します | セカンダリ内部を使用します | セカンダリ外部 | セカンダリ内部 | プライマリ外部 | プライマリ内部 |
0 | _ | _ | | | | |
1 以上 | F | F | | | | |
1 以上 | F | T | | | | |
1 以上 | T | F | | | | |
1 以上 | T | T | | | | |
「 Precise TMC 」情報を 危険距離 および 問題の長さの形式で使用 して、位置の範囲を制限できます。 どちらの値もヘクトメータで指定します (1 ヘクトメータ =100 メートル ) 。
ハザードの距離を指定すると、プライマリロケーションから参照先ロケーションの始点までの後方の距離になります。 危険距離は、原則として、上記のパラメータに含まれるすべての道路セクションの合計長よりも長くしないでください。 参照をデコードするときに、ハザードの距離が複合道路の長さを超えると、合計道路の長さが使用されます(ハザードの距離が指定されていない場合と同じです)。
問題の長さを指定すると、参照先の場所の始点から(潜在的には危険距離によって変更される)参照先の終点までの距離になります。 原則として、問題の長さは、危険距離によって修正された後の残りの道路セグメントの合計長を超えることはできません。 参照をデコードする場合、問題の長さがこの長さを超えると、残りのすべての長さが使用されます ( 問題の長さが指定されていない場合と同じ ) 。