All docschevron-rightNavigation SDK for iOSchevron-rightarrow-leftExampleschevron-rightPredictive caching

Predictive caching

Use predictive caching for navigation.

This code example is part of the Mapbox Navigation SDK for iOS demo app,
which you can build and run:
To learn more about each example in this app, including descriptions and links
to documentation, see our docs:
import UIKit
import MapboxCoreNavigation
import MapboxNavigation
import MapboxDirections
class PredictiveCachingViewController: UIViewController {
override func viewDidLoad() {
let origin = CLLocationCoordinate2DMake(37.77440680146262, -122.43539772352648)
let destination = CLLocationCoordinate2DMake(37.76556957793795, -122.42409811526268)
let options = NavigationRouteOptions(coordinates: [origin, destination])
Directions.shared.calculate(options) { [weak self] (_, result) in
switch result {
case .failure(let error):
case .success(let response):
guard let strongSelf = self else {
// For demonstration purposes, simulate locations if the Simulate Navigation option is on.
// Since first route is retrieved from response `routeIndex` is set to 0.
let indexedRouteResponse = IndexedRouteResponse(routeResponse: response, routeIndex: 0)
let navigationService = MapboxNavigationService(indexedRouteResponse: indexedRouteResponse,
customRoutingProvider: NavigationSettings.shared.directions,
credentials: NavigationSettings.shared.directions.credentials,
simulating: simulationIsEnabled ? .always : .onPoorGPS)
// When predictive caching is enabled, the Navigation SDK will create a cache of data within three configurable boundaries.
var predictiveCacheOptions = PredictiveCacheOptions()
// Predictive cache should be configured separately for navigation and maps
// Radius around the user's location. Defaults to 2000 meters.
predictiveCacheOptions.predictiveCacheNavigationOptions.locationOptions.routeBufferRadius = 300
// Buffer around the route. Defaults to 500 meters.
predictiveCacheOptions.predictiveCacheNavigationOptions.locationOptions.currentLocationRadius = 2000
// Radius around the destination. Defaults to 5000 meters.
predictiveCacheOptions.predictiveCacheNavigationOptions.locationOptions.destinationLocationRadius = 3000
// You can specify zoom range for map data caching.
predictiveCacheOptions.predictiveCacheMapsOptions.zoomRange = 5...12
// Location cache properties can also be configured for map data caching.
predictiveCacheOptions.predictiveCacheMapsOptions.locationOptions.destinationLocationRadius = 2000
let navigationOptions = NavigationOptions(navigationService: navigationService,
predictiveCacheOptions: predictiveCacheOptions)
let navigationViewController = NavigationViewController(for: indexedRouteResponse,
navigationOptions: navigationOptions)
navigationViewController.modalPresentationStyle = .fullScreen
navigationViewController.routeLineTracksTraversal = true
strongSelf.present(navigationViewController, animated: true)