Skip to main content
Version: 1.x (beta)

Itineraries

Compute routes with the Wemap Directions API and start navigation.

Overview​

Itineraries are generated by the Wemap Directions API. How you request them depends on the SDK:

  • WemapMapSDK — use WemapMapSDK/MapNavigationManaging (via mapView.navigationManager) to compute an itinerary and start navigation immediately, or WemapMapSDK/ItineraryManager (via mapView.itineraryManager) to draw an itinerary for preview.
  • WemapGeoARSDK — use WemapGeoARSDK/ARNavigationManaging (via arView.navigationManager).
  • WemapCoreSDK — use WemapCoreSDK/ItineraryProviding (via session.itineraryProvider) to compute itineraries without rendering.

Provide a destination (and optionally an origin); pass an WemapCoreSDK/ItinerarySearchRules value for extra rules. The Directions API supports the walk, car, and bike travel modes; bike also accepts a WemapCoreSDK/TravelMode/Preference (default, safest, fastest, tourism).

Map navigation (WemapMapSDK)​

Compute an itinerary and start navigation in one call. startNavigation is async and returns the started WemapCoreSDK/Navigation:

func startNavigation() async throws {
let origin = Coordinate(coordinate2D: .init(latitude: 43.610628, longitude: 3.876654))
let destination = Coordinate(coordinate2D: .init(latitude: 43.609011, longitude: 3.917091))

let navigation = try await mapView.navigationManager.startNavigation(
origin: origin,
destination: destination,
travelMode: .walk, // default — can be omitted
options: NavigationOptions(stopWhenArrivedAtDestination: false),
searchRules: .wheelchair,
itineraryOptions: ItineraryOptions(indoorLine: .init(color: .red)),
timeout: .seconds(10) // default is .seconds(30)
)
print("Started navigation: \(navigation)")
}

Itinerary preview (WemapMapSDK)​

To draw an itinerary without navigating, compute it with session.itineraryProvider and add it to the map with WemapMapSDK/ItineraryManager:

func previewItinerary() async throws {
let origin = Coordinate(coordinate2D: .init(latitude: 43.610628, longitude: 3.876654))
let destination = Coordinate(coordinate2D: .init(latitude: 43.609011, longitude: 3.917091))

let itineraries = try await session.itineraryProvider.itineraries(
origin: origin, destination: destination, searchRules: .wheelchair
)
_ = mapView.itineraryManager.addItinerary(itineraries.first!) // draw preview
}

AR navigation (WemapGeoARSDK)​

func startNavigation() async throws {
let origin = Coordinate(coordinate2D: .init(latitude: 43.610628, longitude: 3.876654))
let destination = Coordinate(coordinate2D: .init(latitude: 43.609011, longitude: 3.917091))

let navigation = try await arView.navigationManager.startNavigation(
origin: origin,
destination: destination,
travelMode: .walk,
options: NavigationOptions(stopWhenArrivedAtDestination: false),
searchRules: .wheelchair,
timeout: .seconds(10)
)
print("Started AR navigation: \(navigation)")
}

Itinerary computation (WemapCoreSDK)​

Without any rendering, compute itineraries directly from the session's itineraryProvider:

func computeItineraries() async throws {
let origin = Coordinate(coordinate2D: .init(latitude: 43.610628, longitude: 3.876654))
let destination = Coordinate(coordinate2D: .init(latitude: 43.609011, longitude: 3.917091))

let itineraries = try await session.itineraryProvider.itineraries(
origin: origin, destination: destination
)
print("Computed \(itineraries.count) itineraries")
}

Specify a travel mode and preference:

let itineraries = try await session.itineraryProvider.itineraries(
origin: origin, destination: destination, travelMode: .bike(preference: .safest)
)

…or search rules:

let itineraries = try await session.itineraryProvider.itineraries(
origin: origin, destination: destination, travelMode: .walk, searchRules: .wheelchair
)