Navigation SDK for Android is only available upon request. Contact us to get started.
The architecture of TomTom SDKs is modular, meaning that each navigation component is independent of the others.
As a result of this modularization, components are easily replaced with ones from other sources or omitted when they are not needed. Modularity makes it easier to change the standard SDK to address a specific use case.
These replaceable components are referred to as engines.
The Navigation module depends on engines to orchestrate a pipeline after each location update. Different engines are used during different parts of the navigation flow, as shown in the following figure.
The orchestrator contains two main checks that determine if the calculation should continue, or stop for a given location update. After matching a location to the map and providing location context, the pipeline stops if navigation:
- is in free driving mode (i.e., there is no route).
- has detected a deviation from the route.
If none of the conditions is met, the flow proceeds with calculating route progress. A deviation event stops the rest of the pipeline from executing and switches navigation to free driving mode.
The orchestrator works with the following engines:
LocationProvider- Supplies location updates for navigation.
RouteProjectionEngine- This provides map references for routes that are injected into Navigation SDK.
MapMatchingEngine- This improves the accuracy of a position by attempting to match it to a map or a route.
RouteReplanningEngine- This replans routes.
GuidanceEngine- This generates guidance for upcoming road maneuvers.
RouteTrackingEngine- This detects whether the driver follows or deviates from the route.
RouteProgressEngine- This determines the progress made so far along the current route.
LocationContextProviderEngine- This provides detailed information about a current location on the road (e.g., speed limit).
ArrivalDetectionEngine- This checks whether the route destination is reached.
LocationProvider is part of the Location module. All of the other engines are in the Navigation module.
Customized engines are specified in two ways:
- During creation of the
- Dynamically on an existing
TomTomNavigationobject. Note that the
LocationProviderinstance can also be used outside of the navigation. Therefore, you need to decide if you want to close it by yourself. It has to be done after the
NavigationEngineRegistryis updated.1val oldLocationProvider = tomTomNavigation.navigationEngineRegistry.locationProvider2tomTomNavigation.navigationEngineRegistry.updateEngines(3 locationProvider = locationProvider,4 mapMatchingEngine = mapMatchingEngine,5 locationContextProviderEngine = locationContextProviderEngine,6 guidanceEngine = guidanceEngine,7 routeProgressEngine = routeProgressEngine,8 routeTrackingEngine = routeTrackingEngine,9 arrivalDetectionEngine = arrivalDetectionEngine,10)11oldLocationProvider.close()
Navigation session data is passed between different engines and pipeline iterations using
The snapshot doesn’t contain all session data, just what other engines need as input (e.g., the
RouteProgressEngine uses the
MapMatchingResult to calculate the progress along the route). You can see the order that engines use data in the description of the orchestrator.
Because it provides other engines with input data, the navigation snapshot always contains current information about the navigation session, such as current location, matched location, and progress along a route. It is updated whenever new values are available.
The data is divided into the following classes:
LocationSnapshot- contains information specific to location e.g., the
DrivingHistorySnapshot- contains information about any
RoutePointsthat have already been passed.
ConfigurationSnapshot- the navigation configuration, e.g., the
UnitSystemused for guidance.
Vehicle- the current vehicle profile.
TripSnapshot- information about the current trip session, e.g., if the driver has deviated from the route or reached the destination.
RouteSnapshot- route-specific data such as the
RouteProgress, or visited waypoints.
The current navigation snapshot can be accessed using the
TomTomNavigation.navigationSnapshot property. Note that the snapshot is null if the navigation is not yet started or has already been stopped.
Since you have learned about our modular architecture, here are recommendations for the next steps: