コア、パスマッチングのカスタマイズ
この項で core
は、モジュールがコンポーネントからパスマチャを構築するために提供するインターフェイスについて説明します。
libraryDependencies ++= Seq(
"com.here.platform.location" %% "location-core" % "0.21.788"
)
<dependencies>
<dependency>
<groupId>com.here.platform.location</groupId>
<artifactId>location-core_${scala.compat.version}</artifactId>
<version>0.21.788</version>
</dependency>
</dependencies>
dependencies {
compile group: 'com.here.platform.location', name: 'location-core_2.12', version:'0.21.788'
}
候補者ジェネレータ
候補ジェネレータは、マップマッチャーのコンポーネントであり、位置(観察)をマップ上の候補の位置のリスト(候補の状態)に展開します。 MAP マッチャーアルゴリズムは、最後に各観察で最も可能性の高い状態を選択します。
観察の候補ステートを取得するに は、 CandidateGenerator を使用します。
ロケーション ライブラリには 、プロキシミティ検索である ProximitySearchCandidateGenerator を使用する CandidateGenerator が用意されています。
ProximitySearchCandidateGenerator を作成するには、近傍検索と、各観測について使用する検索半径を決定する関数を提供する必要があります。 ほとんどの場合、コードは一定の半径を提供しますが、観測結果によっては異なる半径を提供するようにコードを記述することもできます。 たとえば、 GPS 信号の可視衛星の品質または数に応じて、より小さい、またはより大きい検索半径を使用できます。
次の例では、ファクトリメソッド CandidateGenerators.fromProximitySearch を使用 して 、近接検索および一定の半径から ProximitySearchCandidateGenerator を作成する方法を示します。
val FixedSearchRadius = 40.0
val candidateGenerator =
CandidateGenerators.fromProximitySearch(proximitySearch, FixedSearchRadius)
注
カスタム の CandidateGenerator を実装すると、たとえば、PropertyMaps
で使用可能なroadAccess
属性と組み合わせて、 CAR がアクセスできない候補をパスマッチャーでフィルタリングできます。
放出確率
候補ステートに放出確率 ( 初期確率 ) を割り当てるために、パスマッチャーは EmissionProbibilityStrategy を使用します。
排出ガスの確率を計算する 1 つの方法は、受験者と観察者の距離を使用することです。 頂点が観測から離れるほど、放射確率は低くなります。
DistanceEmissionProbityStrategy はこのヒューリスティックを実装しています。
val emissionProbabilityStrategy =
new DistanceEmissionProbabilityStrategy[Point, Vertex](
distanceForUnknown = FixedSearchRadius,
DistanceEmissionProbabilityStrategy.DefaultProbabilityDistribution
)
usingDistance
また、 PermissionProbityStrategies の FACTORY メソッドを使用し て 、 DistanceEmissionProfibilityStrategy を作成することもできます。
距離以外の情報 ( 見出しなど ) を使用して放出の確率に影響を与えるには、独自のロジック HERE を使用します。
移行の確率
TransitionProbityStrategy は、ある状態から別の状態への移行の確率を計算します。
ルーティンググラフを使用して、さまざまな方法で遷移の確率を計算できます。 ロケーション ライブラリには、いくつかの実装があります。
は directDistance
最も単純な(通常は最速の)方法で、高密度のトレースにのみ適しています。 この方式では、ルーティンググラフが 2 つの状態を直接接続し、 carPathMatcher
およびで使用されるかどうかのみが考慮 understrictedPathMatcher
されます。
type Transition = Seq[Vertex]
val transitionProbabilityStrategy: TransitionProbabilityStrategy[Point, Vertex, Transition] =
TransitionProbabilityStrategies.directDistance[Point, Vertex, Edge](
graph,
length,
roadAccess,
new ProjectionDistanceCalculator(SinusoidalProjection))
TransitionProductityStrategies では、ファクトリメソッドを介して他にもいくつかの実装が利用できます。 たとえば、 distanceWithTransitions
は DistanceTransitionProductibilityStrategy を作成します。この戦略では、状態間のルートを計算して、遷移の確率を計算します。 これにより、スパースデータ (60 秒ごとに 1 ポイント ) の処理に適しています。 場合によっては、観察結果が離れすぎていると、遷移の確率を計算するときに到達不能と見なされることがあります。 この方式は carPathMatcherWithTransitions
、およびによって使用 unrestrictedPathMatcherWithTransitions
され、さまざまなフィルタが適用されます。 遷移の計算時に検索に適用される最大 30km のハードリミットがあります。
パスマッチャー
一般 的には、「パスの作成」のガイドに従って、パスマチャを作成します。
コアパーツから詳細な制御を取得し、パスマッチャーを構築して使用するには 、次のように TransitionProfibilityStrategy および EmissionProbityStrategy を使用できます。
val pathMatcher = new HMMPathMatcher[Point, Vertex, Transition](
candidateGenerator,
emissionProbabilityStrategy,
transitionProbabilityStrategy
)
val matchedPath: MatchedPath[Vertex, Transition] = pathMatcher.matchPath(trip)
for ((observation, candidateState) <- trip.zip(matchedPath.results)) {
println(s"$observation was matched to $candidateState")
}