Horizon hazards
The Navigation SDK for Android is only available upon request. Contact us to get started.
The Hazards Warning service helps anticipate the road ahead. The warnings published are safety-related, meant to inform or warn the driver of an upcoming (dangerous) situation, such as slippery roads, animals or objects in the road, fog-induced reduced visibility and many other hazards.
The Hazards SDK provides data for various categories of hazards, including:
Configuring the horizon engine
Having completed the Retrieving horizon data
guide, you are now able to set up the horizon engine and start navigation to retrieve horizon data.
Specifying horizon options
To subscribe to hazard horizon elements, specify HazardElementTypeUrl
in the list of element types of interest.
1private val horizonOptionsHazards =2 HorizonOptions(3 elementTypes = listOf(HazardElementType),4 mainPathSearchOptions =5 MainPathSearchOptions(6 searchDistancePolicy = RouteLengthPolicy,7 ),8 )
Configuring navigation
The Hazards feature requires configuring the hazards data source before starting navigation. You need to create a HazardConfiguration
object and inject it into the navigation Configuration
constructor. When you set up the HazardConfiguration
object, specify the API key that grants your application access to the TomTom Hazards service.
In addition to configuring the hazards data source, you must also increase the navigation tile prefetching radius to 15 km. This ensures that enough map data is prefetched to allow the exposure of hazard data at the current vehicle position. With a smaller prefetching radius there is no guarantee that the hazard data is exposed in the horizon.
1val navigationTileStore =2 NavigationTileStore.create(3 context = this,4 navigationTileStoreConfig = NavigationTileStoreConfiguration(5 apiKey = TOMTOM_API_KEY,6 prefetchingConfiguration = PrefetchingConfiguration(prefetchedAreaRadius = PREFETCHED_AREA_RADIUS),7 ),8 )9val navigationConfiguration =10 Configuration(11 context = this,12 locationProvider = locationProvider,13 navigationTileStore = navigationTileStore,14 routePlanner = routePlanner,15 hazardsConfiguration = HazardsConfiguration(TOMTOM_API_KEY),16 )
Registering a horizon updated listener
Before starting navigation, register a HorizonUpdatedListener
to listen for horizon updates with the horizon options you have defined.
val tomTomNavigation = OnlineTomTomNavigationFactory.create(navigationConfiguration)tomTomNavigation.addHorizonUpdatedListener(horizonOptionsHazards, horizonUpdatedListener)
Starting navigation
Then, start navigation with a route as described in the Retrieving horizon data
guide.
1val routePlan = RoutePlan(route, routePlanningOptions)2val navigationOptions = NavigationOptions(routePlan)3tomTomNavigation.start(navigationOptions)
Retrieving hazards
With navigation started, you will now listen to horizon updates and retrieve hazard data.
If a hazard zone stretches beyond the end of the horizon, the SDK only provides data for the part of the zone within the horizon length. As the horizon is extended ahead of the vehicle while the vehicle moves along the zone hazard location, the end offset of the
hazard horizon element
is updated accordingly.
Filtering hazards
Some of the retrieved hazards may not be relevant to the driver. For example, the driver may not be interested in strong winds as it is not a concern for the vehicle location. To filter out irrelevant hazards, you can simply add additional filtering during the retrieval of the hazard horizon elements
:
1private fun HorizonPath.retrieveHazardElements(): List<HazardElement> = getElements(HazardElementType)2 .map { it as HazardElement }3 .filter { element ->4 // Filters out hazards of type StrongWind5 element.hazard.type != HazardType.StrongWind6 }
Next steps
Now that you know how to retrieve horizon hazards data, here are the recommendations on what to explore next: