4 * RouteManager usage example for Swift
5 * Demonstrates working with route planning, path calculation, and navigation
7class RouteManagerExample: NSObject {
8 private var sdk: NCNavigineSdk?
9 private var locationManager: NCLocationManager?
10 private var navigationManager: NCNavigationManager?
11 private var routeManager: NCRouteManager?
20 * Initialize SDK and get managers
22 private func initializeSdk() {
24 // [swift_NavigineSdk_getInstance]
26 sdk = NCNavigineSdk.getInstance()
27 // [swift_NavigineSdk_getInstance]
29 // [swift_NavigineSdk_setUserHash]
31 sdk?.setUserHash("USER-HASH-HERE")
32 // [swift_NavigineSdk_setUserHash]
34 // [swift_NavigineSdk_setServer]
35 // Set server URL (optional)
36 sdk?.setServer("https://custom.navigine.com")
37 // [swift_NavigineSdk_setServer]
39 // [swift_NavigineSdk_getLocationManager]
40 // Get LocationManager for working with locations
41 locationManager = sdk?.getLocationManager()
42 // [swift_NavigineSdk_getLocationManager]
44 // [swift_NavigineSdk_getNavigationManager]
45 // Get NavigationManager for working with navigation
46 navigationManager = sdk?.getNavigationManager(locationManager)
47 // [swift_NavigineSdk_getNavigationManager]
49 // [swift_NavigineSdk_getRouteManager]
50 // Get RouteManager for working with routes
51 routeManager = sdk?.getRouteManager(locationManager, navigationManager: navigationManager)
52 // [swift_NavigineSdk_getRouteManager]
54 if let locationManager = locationManager,
55 let navigationManager = navigationManager,
56 let routeManager = routeManager {
57 print("LocationManager, NavigationManager and RouteManager successfully initialized")
60 print("Error initializing SDK: \(error)")
65 * Setup route listener
67 private func setupRouteListener() {
68 // RouteListener is implemented via protocol extension
69 // No additional setup needed for Swift
73 * Demonstrate RouteManager methods
75 func demonstrateRouteManagerMethods() {
76 guard let manager = routeManager else {
77 print("RouteManager not initialized")
81 // [swift_RouteManager_addRouteListener]
83 manager.addRouteListener(self)
84 // [swift_RouteManager_addRouteListener]
86 // [swift_RouteManager_setGraphTag]
88 manager.setGraphTag("main")
89 // [swift_RouteManager_setGraphTag]
91 // [swift_RouteManager_getGraphTag]
92 // Get current graph tag
93 let currentGraphTag = manager.getGraphTag()
94 print("Current graph tag: \(currentGraphTag)")
95 // [swift_RouteManager_getGraphTag]
97 // [swift_RouteManager_getGraphTags]
99 let graphTags = manager.getGraphTags()
100 print("Available graph tags: \(graphTags)")
101 // [swift_RouteManager_getGraphTags]
103 // Create test points
104 let startPoint = NCPoint(x: 10.0, y: 20.0)
105 let endPoint = NCPoint(x: 50.0, y: 60.0)
106 let startLocationPoint = NCLocationPoint(point: startPoint, locationId: 12345, sublocationId: 1)
107 let endLocationPoint = NCLocationPoint(point: endPoint, locationId: 12345, sublocationId: 1)
109 // [swift_RouteManager_makeRoute]
110 // Make route from point to point
111 let routePath = manager.makeRoute(startLocationPoint, to: endLocationPoint)
112 print("Route created with length: \(routePath.getLength()) meters")
113 // [swift_RouteManager_makeRoute]
115 // [swift_RouteManager_makeRoutes]
116 // Make routes to multiple destinations
118 NCLocationPoint(point: NCPoint(x: 30.0, y: 40.0), locationId: 12345, sublocationId: 1),
119 NCLocationPoint(point: NCPoint(x: 70.0, y: 80.0), locationId: 12345, sublocationId: 1)
121 let routePaths = manager.makeRoutes(startLocationPoint, to: destinations)
122 print("Created \(routePaths.count) routes")
123 // [swift_RouteManager_makeRoutes]
125 // [swift_RouteManager_setTarget]
127 manager.setTarget(endLocationPoint)
128 // [swift_RouteManager_setTarget]
130 // [swift_RouteManager_addTarget]
131 // Add additional target point
132 let additionalTarget = NCLocationPoint(point: NCPoint(x: 90.0, y: 100.0), locationId: 12345, sublocationId: 1)
133 manager.addTarget(additionalTarget)
134 // [swift_RouteManager_addTarget]
136 // [swift_RouteManager_cancelTarget]
137 // Cancel current target
138 manager.cancelTarget()
139 // [swift_RouteManager_cancelTarget]
141 // [swift_RouteManager_clearTargets]
143 manager.clearTargets()
144 // [swift_RouteManager_clearTargets]
148 * Demonstrate RoutePath class methods
150 func demonstrateRoutePathUsage(_ paths: [NCRoutePath]) {
151 for (index, path) in paths.enumerated() {
152 print("=== Route Path \(index + 1) ===")
154 // [swift_RoutePath_getLength]
156 let length = path.getLength()
157 print("Route length: \(length) meters")
158 // [swift_RoutePath_getLength]
160 // [swift_RoutePath_getWeight]
161 // Get total route weight
162 let weight = path.getWeight()
163 print("Route weight: \(weight)")
164 // [swift_RoutePath_getWeight]
166 // [swift_RoutePath_getNodes]
168 let nodes = path.getNodes()
169 print("Route has \(nodes.count) nodes")
171 demonstrateRouteNodeUsage(node)
173 // [swift_RoutePath_getNodes]
175 // [swift_RoutePath_head]
176 // Get head of route (first 10 meters)
177 if let headPath = path.head(10.0) {
178 print("Head path length: \(headPath.getLength()) meters")
180 // [swift_RoutePath_head]
182 // [swift_RoutePath_tail]
183 // Get tail of route (remaining after 10 meters)
184 if let tailPath = path.tail(10.0) {
185 print("Tail path length: \(tailPath.getLength()) meters")
187 // [swift_RoutePath_tail]
191 func demonstrateRouteNodeUsage(_ node: NCRouteNode) {
192 // [swift_RouteNode_getPoint]
193 let point = node.getPoint()
194 demonstrateLocationPointUsage(point)
195 // [swift_RouteNode_getPoint]
197 // [swift_RouteNode_getWeight]
198 let weight = node.getWeight()
199 print("Node weight: \(weight)")
200 // [swift_RouteNode_getWeight]
202 // [swift_RouteNode_getDistance]
203 let distance = node.getDistance()
204 print("Node distance: \(distance) meters")
205 // [swift_RouteNode_getDistance]
207 // [swift_RouteNode_getEvents]
208 let events = node.getEvents()
209 print("Node has \(events.count) events")
210 for event in events {
211 demonstrateRouteEventUsage(event)
213 // [swift_RouteNode_getEvents]
217 * Demonstrate RouteEvent class methods
219 func demonstrateRouteEventUsage(_ event: NCRouteEvent) {
220 // [swift_RouteEvent_getType]
222 let type = event.getType()
223 print("Event type: \(type)")
224 // [swift_RouteEvent_getType]
226 // [swift_RouteEvent_getTurnEvent]
227 if let turnEvent = event.getTurnEvent() {
228 demonstrateTurnEventUsage(turnEvent)
230 // [swift_RouteEvent_getTurnEvent]
232 // [swift_RouteEvent_getTransitionEntryEvent]
233 if let entryEvent = event.getTransitionEntryEvent() {
234 demonstrateTransitionEntryEventUsage(entryEvent)
236 // [swift_RouteEvent_getTransitionEntryEvent]
238 // [swift_RouteEvent_getTransitionExitEvent]
239 if let exitEvent = event.getTransitionExitEvent() {
240 demonstrateTransitionExitEventUsage(exitEvent)
242 // [swift_RouteEvent_getTransitionExitEvent]
244 // [swift_RouteEvent_getTargetReachedEvent]
245 if let targetEvent = event.getTargetReachedEvent() {
246 demonstrateTargetReachedEventUsage(targetEvent)
248 // [swift_RouteEvent_getTargetReachedEvent]
252 * Demonstrate RouteEventType enum values
254 func demonstrateRouteEventTypes() {
255 // [swift_RouteEventType_values]
256 // Get all route event type values
257 let types: [NCRouteEventType] = [.turnLeft, .turnRight, .transition]
258 print("Available route event types:")
262 // [swift_RouteEventType_values]
265 func demonstrateTurnTypes() {
266 // [swift_TurnType_values]
267 let types: [NCTurnType] = [.leftSlight, .leftNormal, .leftSharp, .rightSlight, .rightNormal, .rightSharp, .complete]
268 print("Available turn types:")
272 // [swift_TurnType_values]
275 func demonstrateTurnEventUsage(_ event: NCTurnEvent) {
276 // [swift_TurnEvent_getType]
277 let type = event.getType()
278 print("Turn type: \(type)")
279 // [swift_TurnEvent_getType]
281 // [swift_TurnEvent_getAngle]
282 let angle = event.getAngle()
283 print("Turn angle: \(angle)")
284 // [swift_TurnEvent_getAngle]
287 func demonstrateTransitionEntryEventUsage(_ event: NCTransitionEntryEvent) {
288 // [swift_TransitionEntryEvent_getFrom]
289 let from = event.getFrom()
290 print("Transition entry from: \(from)")
291 // [swift_TransitionEntryEvent_getFrom]
293 // [swift_TransitionEntryEvent_getTo]
294 let to = event.getTo()
295 print("Transition entry to: \(to)")
296 // [swift_TransitionEntryEvent_getTo]
299 func demonstrateTransitionExitEventUsage(_ event: NCTransitionExitEvent) {
300 // [swift_TransitionExitEvent_getFrom]
301 let from = event.getFrom()
302 print("Transition exit from: \(from)")
303 // [swift_TransitionExitEvent_getFrom]
305 // [swift_TransitionExitEvent_getTo]
306 let to = event.getTo()
307 print("Transition exit to: \(to)")
308 // [swift_TransitionExitEvent_getTo]
311 func demonstrateTargetReachedEventUsage(_ event: NCTargetReachedEvent) {
312 // [swift_TargetReachedEvent_getIndex]
313 let index = event.getIndex()
314 print("Reached target index: \(index)")
315 // [swift_TargetReachedEvent_getIndex]
317 // [swift_TargetReachedEvent_getPoint]
318 let point = event.getPoint()
319 demonstrateLocationPointUsage(point)
320 // [swift_TargetReachedEvent_getPoint]
324 * Demonstrate LocationPoint class methods
326 func demonstrateLocationPointUsage(_ locationPoint: NCLocationPoint) {
327 // [swift_LocationPoint_getPoint]
328 // Get point coordinates
329 if let point = locationPoint.getPoint() {
330 demonstratePointUsage(point)
332 // [swift_LocationPoint_getPoint]
334 // [swift_LocationPoint_getLocationId]
336 let locationId = locationPoint.getLocationId()
337 print("Location ID: \(locationId)")
338 // [swift_LocationPoint_getLocationId]
340 // [swift_LocationPoint_getSublocationId]
341 // Get sublocation ID
342 let sublocationId = locationPoint.getSublocationId()
343 print("Sublocation ID: \(sublocationId)")
344 // [swift_LocationPoint_getSublocationId]
346 // [swift_LocationPoint_constructor]
347 // Create new LocationPoint
348 let newPoint = NCPoint(x: 15.0, y: 25.0)
349 let newLocationPoint = NCLocationPoint(point: newPoint, locationId: locationId, sublocationId: sublocationId)
350 print("Created new LocationPoint: \(newLocationPoint)")
351 // [swift_LocationPoint_constructor]
355 * Demonstrate Point class methods
357 func demonstratePointUsage(_ point: NCPoint) {
358 // [swift_Point_getX]
361 print("Point X: \(x)")
362 // [swift_Point_getX]
364 // [swift_Point_getY]
367 print("Point Y: \(y)")
368 // [swift_Point_getY]
370 // [swift_Point_constructor]
372 let newPoint = NCPoint(x: x, y: y)
373 print("Created new Point: \(newPoint)")
374 // [swift_Point_constructor]
378 * Demonstrate advanced routing features
380 func demonstrateAdvancedRoutingFeatures() {
381 print("=== Advanced Routing Features ===")
383 guard let manager = routeManager else {
387 // Create multiple routes with different graph tags
388 let graphTags = ["main", "elevator", "stairs"]
390 for tag in graphTags {
391 // [swift_RouteManager_setGraphTag_2]
392 // Set different graph tag for routing
393 manager.setGraphTag(tag)
394 // [swift_RouteManager_setGraphTag_2]
396 print("Routing with graph tag: \(tag)")
399 let startPoint = NCPoint(x: 0.0, y: 0.0)
400 let endPoint = NCPoint(x: 100.0, y: 100.0)
401 let startLocationPoint = NCLocationPoint(point: startPoint, locationId: 12345, sublocationId: 1)
402 let endLocationPoint = NCLocationPoint(point: endPoint, locationId: 12345, sublocationId: 1)
404 // [swift_RouteManager_makeRoute_2]
405 // Make route with specific graph tag
406 let routePath = manager.makeRoute(startLocationPoint, to: endLocationPoint)
407 // [swift_RouteManager_makeRoute_2]
409 print("Route with tag '\(tag)' has length: \(routePath.getLength()) meters")
414 * Demonstrate route planning simulation
416 func demonstrateRoutePlanningSimulation() {
417 print("=== Route Planning Simulation ===")
419 guard let manager = routeManager else {
423 // Create multiple target points
425 NCLocationPoint(point: NCPoint(x: 50.0, y: 50.0), locationId: 12345, sublocationId: 1),
426 NCLocationPoint(point: NCPoint(x: 100.0, y: 100.0), locationId: 12345, sublocationId: 1),
427 NCLocationPoint(point: NCPoint(x: 150.0, y: 150.0), locationId: 12345, sublocationId: 1)
430 // [swift_RouteManager_setTarget_2]
432 manager.setTarget(targets[0])
433 // [swift_RouteManager_setTarget_2]
435 print("Set target 1: \(targets[0])")
436 Thread.sleep(forTimeInterval: 1.0)
438 // [swift_RouteManager_addTarget_2]
439 // Add additional targets
440 for (index, target) in targets.dropFirst().enumerated() {
441 manager.addTarget(target)
442 print("Added target \(index + 2): \(target)")
443 Thread.sleep(forTimeInterval: 1.0)
445 // [swift_RouteManager_addTarget_2]
447 // [swift_RouteManager_cancelTarget_2]
448 // Cancel current target
449 manager.cancelTarget()
450 print("Cancelled current target")
451 // [swift_RouteManager_cancelTarget_2]
453 Thread.sleep(forTimeInterval: 1.0)
455 // [swift_RouteManager_clearTargets_2]
457 manager.clearTargets()
458 print("Cleared all targets")
459 // [swift_RouteManager_clearTargets_2]
466 if let manager = routeManager {
467 // [swift_RouteManager_removeRouteListener]
468 // Remove route listener
469 manager.removeRouteListener(self)
470 // [swift_RouteManager_removeRouteListener]
475 * Main demonstration method
478 print("=== RouteManager Example ===")
480 demonstrateRouteManagerMethods()
481 demonstrateRouteEventTypes()
482 demonstrateTurnTypes()
483 demonstrateAdvancedRoutingFeatures()
484 demonstrateRoutePlanningSimulation()
486 // Wait a bit for route updates
487 Thread.sleep(forTimeInterval: 3.0)
490 print("=== Example completed ===")
494// MARK: - NCRouteListener
496extension RouteManagerExample: NCRouteListener {
497 // [swift_RouteListener_onPathsUpdated]
498 func onPathsUpdated(_ paths: [NCRoutePath]) {
499 print("Routes updated successfully")
500 demonstrateRoutePathUsage(paths)
502 // [swift_RouteListener_onPathsUpdated]
506 * Function to run the example
509 let example = RouteManagerExample()