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(viamapView.navigationManager) to compute an itinerary and start navigation immediately, orWemapMapSDK/ItineraryManager(viamapView.itineraryManager) to draw an itinerary for preview. - WemapGeoARSDK — use
WemapGeoARSDK/ARNavigationManaging(viaarView.navigationManager). - WemapCoreSDK — use
WemapCoreSDK/ItineraryProviding(viasession.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
)