import com.here.platform.location.core.geospatial.{
ElementProjection,
GeoCoordinate,
GreatCircleDistanceCalculator
}
import com.here.platform.location.core.mapmatching._
import com.here.platform.location.inmemory.geospatial.TileId
import com.here.platform.location.inmemory.graph.VertexIndex
import com.here.platform.location.integration.optimizedmap.graph.{
Graphs,
PropertyMaps,
RoadAccess
}
import com.here.platform.location.integration.optimizedmap.mapmatching.{
EmissionProbabilityStrategies,
PathMatchers,
TransitionProbabilityStrategies
}
val origin = GeoCoordinate(0, 0)
val originCandidate =
IndexedSeq(OnRoad(ElementProjection(Vertex(TileId(1), VertexIndex(0)), origin, 0, 0.0)))
class CustomCandidateGenerator extends CandidateGenerator[GeoCoordinate, Vertex] {
override def generate(observation: GeoCoordinate): IndexedSeq[MatchResult[Vertex]] =
if (observation == origin) originCandidate else IndexedSeq.empty
}
val customPathMatcher: PathMatcher[GeoCoordinate, Vertex, Seq[Vertex]] =
PathMatchers.newHMMPathMatcher(
new CustomCandidateGenerator,
EmissionProbabilityStrategies.usingDistance,
TransitionProbabilityStrategies.directDistance(
Graphs.from(optimizedMap, cacheManager),
PropertyMaps.length(optimizedMap, cacheManager),
PropertyMaps.roadAccess(optimizedMap, cacheManager, RoadAccess.Automobile),
GreatCircleDistanceCalculator
)
)
import com.here.platform.location.core.geospatial.ElementProjection;
import com.here.platform.location.core.geospatial.GeoCoordinate;
import com.here.platform.location.core.geospatial.GreatCircleDistanceCalculator;
import com.here.platform.location.core.mapmatching.MatchResult;
import com.here.platform.location.core.mapmatching.OnRoad;
import com.here.platform.location.core.mapmatching.javadsl.CandidateGenerator;
import com.here.platform.location.core.mapmatching.javadsl.PathMatcher;
import com.here.platform.location.inmemory.graph.Vertex;
import com.here.platform.location.integration.optimizedmap.graph.RoadAccess;
import com.here.platform.location.integration.optimizedmap.graph.javadsl.Graphs;
import com.here.platform.location.integration.optimizedmap.graph.javadsl.PropertyMaps;
import com.here.platform.location.integration.optimizedmap.mapmatching.javadsl.EmissionProbabilityStrategies;
import com.here.platform.location.integration.optimizedmap.mapmatching.javadsl.PathMatchers;
import com.here.platform.location.integration.optimizedmap.mapmatching.javadsl.TransitionProbabilityStrategies;
final GeoCoordinate origin = new GeoCoordinate(0, 0);
final List<MatchResult<Vertex>> originCandidate = new ArrayList<>();
originCandidate.add(new OnRoad<>(new ElementProjection<>(new Vertex(1, 0), origin, 0, 0.0)));
final CandidateGenerator<GeoCoordinate, Vertex> customCandidateGenerator =
observation -> {
if (observation.equals(origin)) return originCandidate;
else return new ArrayList<>();
};
final PathMatcher<GeoCoordinate, Vertex, List<Vertex>> customPathMatcher =
PathMatchers.newHMMPathMatcher(
customCandidateGenerator,
EmissionProbabilityStrategies.usingDistance(),
TransitionProbabilityStrategies.distanceWithTransitions(
Graphs.from(optimizedMap, cacheManager),
PropertyMaps.geometry(optimizedMap, cacheManager),
PropertyMaps.length(optimizedMap, cacheManager),
PropertyMaps.roadAccess(optimizedMap, cacheManager, RoadAccess.Automobile),
GreatCircleDistanceCalculator.getInstance()));