NCAsyncRouteManager tutorial - Navigine/Indoor-Navigation-iOS-Mobile-SDK-2.0 GitHub Wiki
NCAsyncRouteManager class is used for class is used for evaluating route path from point to point.
You can download example project to try it on your location.
Step 1
Replace all user data with your own
let serverUrl = "https://ips.navigine.com"
let userHash = "0000-0000-0000-0000"
let locationId: Int32 = 0
Step 2
Initialize SDK by following methods
var mNavigineSdk: NCNavigineSdk?
var mLocationManager: NCLocationManager?
var mNavigationManager: NCNavigationManager?
var mAsyncRouteManager: NCAsyncRouteManager?
var mAsyncRouteSession: NCRouteSession?
func initSDK() {
//the main funcions to init Navigine SDK
mNavigineSdk = NCNavigineSdk.getInstance()
mNavigineSdk?.setServer(serverUrl)
mNavigineSdk?.setUserHash(userHash)
//get Location manager and add your class to listen updates of location manager
mLocationManager = mNavigineSdk?.getLocationManager()
mLocationManager?.add(self)
//get Navigation manager and add listener to update user position
mNavigationManager = mNavigineSdk?.getNavigationManager(mLocationManager)
mNavigationManager?.add(self)
mAsyncRouteManager = mNavigineSdk?.getAsyncRouteManager(mLocationManager, navigationManager: mNavigationManager)
//call func of touches on map (NCPickListener)
mLocationView.locationWindow.add(self as NCPickListener)
mLocationView.locationWindow.add(self as NCInputListener)
mLocationView.locationWindow.stickToBorder = true
}
Step 3
Set your location ID
mLocationManager?.setLocationId(locationId)
Step 4
Subscribe your class to the NCLocationListener
extension ViewController: NCLocationListener {
//this func called when new location loaded or updated from server, **don't forget to set floor** to update map on the screen
func onLocationLoaded(_ location: NCLocation?) {
}
//when location loading failed you can check why
func onLocationFailed(_ locationId: Int32, error: Error?) {
}
//when you change location and update it on the server called this func
func onLocationUploaded(_ locationId: Int32) {
}
}
Step 5
Subscribe your class to NCPositionListener
extension ViewController: NCPositionListener {
func onPositionUpdated(_ position: NCPosition) {
//here you should update position of user icon on map (NCFlatIconMapObject)
}
func onPositionError(_ error: Error?) {
//usually we remove user position icon from map if we have position error
}
}
Step 6
Subscribe to NCInputListener to use gestures on the map. Here we start navigation by long tap.
extension ViewController : NCInputListener {
func onViewTap(_ screenPoint: CGPoint) {
//here you redirect to Step 7 if user taped on venue
mLocationView.locationWindow.pickMapFeature(at: screenPoint)
}
func onViewDoubleTap(_ screenPoint: CGPoint) {
}
func onViewLongTap(_ screenPoint: CGPoint) {
//func to convert screen point to location point on the map
let point = mLocationView.locationWindow.screenPosition(toMeters: screenPoint)
let locPoint = NCLocationPoint(point: point, locationId: mLocation!.id , sublocationId: mLocation!.sublocations[floor].id)
//here is an example how to start routing by long tap
mFinishPoint = locPoint
startRouting()
}
func locationView(_ view: NCLocationView!, recognizer: UIGestureRecognizer!, didRecognizeLongPressGesture location: CGPoint) {
}
}
Step 7
To start routing you should create session in NCAsyncRouteManager like in this example.
func startRouting() {
if let asyncRouteSession = mAsyncRouteSession {
mAsyncRouteManager?.cancel(asyncRouteSession)
}
let options = NCRouteOptions(smoothRadius: 0, maxProjectionDistance: 3, maxAdvance: 2)
mAsyncRouteSession = mAsyncRouteManager?.createRouteSession(mFinishPoint, routeOptions: options)
mAsyncRouteSession?.add(self)
}
Step 8
Subscribe to NCAsyncRouteListener to track actual route status
extension ViewController: NCAsyncRouteListener {
func onRouteChanged(_ currentPath: NCRoutePath?) {
}
func onRouteAdvanced(_ distance: Float, point: NCLocationPoint) {
}
}
You will find a full example of use NCAsyncRouteManager, in this small project we showed how we use the NCAsyncRouteManager in our application