Loading...
Searching...
No Matches
RouteManagerExample.kt
Go to the documentation of this file.
1import kotlinx.coroutines.delay
2import kotlinx.coroutines.runBlocking
3
4/**
5 * RouteManager usage example for Kotlin
6 * Demonstrates working with route planning, path calculation, and navigation
7 */
8class RouteManagerExample {
9 private var sdk: NavigineSdk? = null
10 private var locationManager: LocationManager? = null
11 private var navigationManager: NavigationManager? = null
12 private var routeManager: RouteManager? = null
13 private var routeListener: RouteListener? = null
14
15 init {
16 initializeSdk()
17 setupRouteListener()
18 }
19
20 /**
21 * Initialize SDK and get managers
22 */
23 private fun initializeSdk() {
24 try {
25 // [kotlin_NavigineSdk_getInstance]
26 // Get SDK instance
27 sdk = NavigineSdk.getInstance()
28 // [kotlin_NavigineSdk_getInstance]
29
30 // [kotlin_NavigineSdk_setUserHash]
31 // Set user hash
32 sdk?.setUserHash("USER-HASH-HERE")
33 // [kotlin_NavigineSdk_setUserHash]
34
35 // [kotlin_NavigineSdk_setServer]
36 // Set server URL (optional)
37 sdk?.setServer("https://custom.navigine.com")
38 // [kotlin_NavigineSdk_setServer]
39
40 // [kotlin_NavigineSdk_getLocationManager]
41 // Get LocationManager for working with locations
42 locationManager = sdk?.getLocationManager()
43 // [kotlin_NavigineSdk_getLocationManager]
44
45 // [kotlin_NavigineSdk_getNavigationManager]
46 // Get NavigationManager for working with navigation
47 navigationManager = sdk?.getNavigationManager(locationManager)
48 // [kotlin_NavigineSdk_getNavigationManager]
49
50 // [kotlin_NavigineSdk_getRouteManager]
51 // Get RouteManager for working with routes
52 routeManager = sdk?.getRouteManager(locationManager, navigationManager)
53 // [kotlin_NavigineSdk_getRouteManager]
54
55 if (locationManager != null && navigationManager != null && routeManager != null) {
56 println("LocationManager, NavigationManager and RouteManager successfully initialized")
57 }
58 } catch (e: Exception) {
59 System.err.println("Error initializing SDK: ${e.message}")
60 }
61 }
62
63 /**
64 * Setup route listener
65 */
66 private fun setupRouteListener() {
67 routeListener = object : RouteListener() {
68 // [kotlin_RouteListener_onPathsUpdated]
69 override fun onPathsUpdated(paths: List<RoutePath>) {
70 println("Routes updated successfully")
71 demonstrateRoutePathUsage(paths)
72 }
73 // [kotlin_RouteListener_onPathsUpdated]
74 }
75 }
76
77 /**
78 * Demonstrate RouteManager methods
79 */
80 fun demonstrateRouteManagerMethods() {
81 val manager = routeManager ?: run {
82 System.err.println("RouteManager not initialized")
83 return
84 }
85
86 val listener = routeListener ?: return
87
88 // [kotlin_RouteManager_addRouteListener]
89 // Add route listener
90 manager.addRouteListener(listener)
91 // [kotlin_RouteManager_addRouteListener]
92
93 // [kotlin_RouteManager_setGraphTag]
94 // Set graph tag
95 manager.setGraphTag("main")
96 // [kotlin_RouteManager_setGraphTag]
97
98 // [kotlin_RouteManager_getGraphTag]
99 // Get current graph tag
100 val currentGraphTag = manager.getGraphTag()
101 println("Current graph tag: $currentGraphTag")
102 // [kotlin_RouteManager_getGraphTag]
103
104 // [kotlin_RouteManager_getGraphTags]
105 // Get all graph tags
106 val graphTags = manager.getGraphTags()
107 println("Available graph tags: $graphTags")
108 // [kotlin_RouteManager_getGraphTags]
109
110 // Create test points
111 val startPoint = Point(10.0, 20.0)
112 val endPoint = Point(50.0, 60.0)
113 val startLocationPoint = LocationPoint(startPoint, 12345, 1)
114 val endLocationPoint = LocationPoint(endPoint, 12345, 1)
115
116 // [kotlin_RouteManager_makeRoute]
117 // Make route from point to point
118 val routePath = manager.makeRoute(startLocationPoint, endLocationPoint)
119 println("Route created with length: ${routePath.length} meters")
120 // [kotlin_RouteManager_makeRoute]
121
122 // [kotlin_RouteManager_makeRoutes]
123 // Make routes to multiple destinations
124 val destinations = listOf(
125 LocationPoint(Point(30.0, 40.0), 12345, 1),
126 LocationPoint(Point(70.0, 80.0), 12345, 1)
127 )
128 val routePaths = manager.makeRoutes(startLocationPoint, destinations)
129 println("Created ${routePaths.size} routes")
130 // [kotlin_RouteManager_makeRoutes]
131
132 // [kotlin_RouteManager_setTarget]
133 // Set target point
134 manager.setTarget(endLocationPoint)
135 // [kotlin_RouteManager_setTarget]
136
137 // [kotlin_RouteManager_addTarget]
138 // Add additional target point
139 val additionalTarget = LocationPoint(Point(90.0, 100.0), 12345, 1)
140 manager.addTarget(additionalTarget)
141 // [kotlin_RouteManager_addTarget]
142
143 // [kotlin_RouteManager_cancelTarget]
144 // Cancel current target
145 manager.cancelTarget()
146 // [kotlin_RouteManager_cancelTarget]
147
148 // [kotlin_RouteManager_clearTargets]
149 // Clear all targets
150 manager.clearTargets()
151 // [kotlin_RouteManager_clearTargets]
152 }
153
154 /**
155 * Demonstrate RoutePath class methods
156 */
157 fun demonstrateRoutePathUsage(paths: List<RoutePath>) {
158 paths.forEachIndexed { index, path ->
159 println("=== Route Path ${index + 1} ===")
160
161 // [kotlin_RoutePath_getLength]
162 // Get route length
163 val length = path.length
164 println("Route length: $length meters")
165 // [kotlin_RoutePath_getLength]
166
167 // [kotlin_RoutePath_getWeight]
168 // Get total route weight
169 val weight = path.weight
170 println("Route weight: $weight")
171 // [kotlin_RoutePath_getWeight]
172
173 // [kotlin_RoutePath_getNodes]
174 // Get route nodes
175 val nodes = path.nodes
176 println("Route has ${nodes.size} nodes")
177 nodes.forEach { node ->
178 demonstrateRouteNodeUsage(node)
179 }
180 // [kotlin_RoutePath_getNodes]
181
182 // [kotlin_RoutePath_head]
183 // Get head of route (first 10 meters)
184 val headPath = path.head(10.0)
185 headPath?.let {
186 println("Head path length: ${it.length} meters")
187 }
188 // [kotlin_RoutePath_head]
189
190 // [kotlin_RoutePath_tail]
191 // Get tail of route (remaining after 10 meters)
192 val tailPath = path.tail(10.0)
193 tailPath?.let {
194 println("Tail path length: ${it.length} meters")
195 }
196 // [kotlin_RoutePath_tail]
197 }
198 }
199
200 /**
201 * Demonstrate RouteNode class methods
202 */
203 fun demonstrateRouteNodeUsage(node: RouteNode) {
204 // [kotlin_RouteNode_getPoint]
205 val point = node.point
206 demonstrateLocationPointUsage(point)
207 // [kotlin_RouteNode_getPoint]
208
209 // [kotlin_RouteNode_getWeight]
210 val weight = node.weight
211 println("Node weight: $weight")
212 // [kotlin_RouteNode_getWeight]
213
214 // [kotlin_RouteNode_getDistance]
215 val distance = node.distance
216 println("Node distance: $distance meters")
217 // [kotlin_RouteNode_getDistance]
218
219 // [kotlin_RouteNode_getEvents]
220 val events = node.events
221 println("Node has ${events.size} events")
222 events.forEach { event ->
223 demonstrateRouteEventUsage(event)
224 }
225 // [kotlin_RouteNode_getEvents]
226 }
227
228 /**
229 * Demonstrate RouteEvent class methods
230 */
231 fun demonstrateRouteEventUsage(event: RouteEvent) {
232 // [kotlin_RouteEvent_getType]
233 // Get event type
234 val type = event.type
235 println("Event type: $type")
236 // [kotlin_RouteEvent_getType]
237
238 // [kotlin_RouteEvent_getTurnEvent]
239 val turnEvent = event.turnEvent
240 turnEvent?.let { demonstrateTurnEventUsage(it) }
241 // [kotlin_RouteEvent_getTurnEvent]
242
243 // [kotlin_RouteEvent_getTransitionEntryEvent]
244 val entryEvent = event.transitionEntryEvent
245 entryEvent?.let { demonstrateTransitionEntryEventUsage(it) }
246 // [kotlin_RouteEvent_getTransitionEntryEvent]
247
248 // [kotlin_RouteEvent_getTransitionExitEvent]
249 val exitEvent = event.transitionExitEvent
250 exitEvent?.let { demonstrateTransitionExitEventUsage(it) }
251 // [kotlin_RouteEvent_getTransitionExitEvent]
252
253 // [kotlin_RouteEvent_getTargetReachedEvent]
254 val reachedEvent = event.targetReachedEvent
255 reachedEvent?.let { demonstrateTargetReachedEventUsage(it) }
256 // [kotlin_RouteEvent_getTargetReachedEvent]
257 }
258
259 /**
260 * Demonstrate RouteEventType enum values
261 */
262 fun demonstrateRouteEventTypes() {
263 // [kotlin_RouteEventType_values]
264 // Get all route event type values
265 val types = RouteEventType.values()
266 println("Available route event types:")
267 types.forEach { type ->
268 println(" - $type")
269 }
270 // [kotlin_RouteEventType_values]
271 }
272
273 /**
274 * Demonstrate TurnType enum values
275 */
276 fun demonstrateTurnTypes() {
277 // [kotlin_TurnType_values]
278 val types = TurnType.values()
279 println("Available turn types:")
280 types.forEach { type ->
281 println(" - $type")
282 }
283 // [kotlin_TurnType_values]
284 }
285
286 fun demonstrateTurnEventUsage(turnEvent: TurnEvent) {
287 // [kotlin_TurnEvent_getType]
288 val type = turnEvent.type
289 println("Turn type: $type")
290 // [kotlin_TurnEvent_getType]
291
292 // [kotlin_TurnEvent_getAngle]
293 val angle = turnEvent.angle
294 println("Turn angle: $angle")
295 // [kotlin_TurnEvent_getAngle]
296 }
297
298 fun demonstrateTransitionEntryEventUsage(event: TransitionEntryEvent) {
299 // [kotlin_TransitionEntryEvent_getFrom]
300 val from = event.from
301 println("Transition entry from: $from")
302 // [kotlin_TransitionEntryEvent_getFrom]
303
304 // [kotlin_TransitionEntryEvent_getTo]
305 val to = event.to
306 println("Transition entry to: $to")
307 // [kotlin_TransitionEntryEvent_getTo]
308 }
309
310 fun demonstrateTransitionExitEventUsage(event: TransitionExitEvent) {
311 // [kotlin_TransitionExitEvent_getFrom]
312 val from = event.from
313 println("Transition exit from: $from")
314 // [kotlin_TransitionExitEvent_getFrom]
315
316 // [kotlin_TransitionExitEvent_getTo]
317 val to = event.to
318 println("Transition exit to: $to")
319 // [kotlin_TransitionExitEvent_getTo]
320 }
321
322 fun demonstrateTargetReachedEventUsage(event: TargetReachedEvent) {
323 // [kotlin_TargetReachedEvent_getIndex]
324 val index = event.index
325 println("Reached target index: $index")
326 // [kotlin_TargetReachedEvent_getIndex]
327
328 // [kotlin_TargetReachedEvent_getPoint]
329 val point = event.point
330 demonstrateLocationPointUsage(point)
331 // [kotlin_TargetReachedEvent_getPoint]
332 }
333
334 /**
335 * Demonstrate LocationPoint class methods
336 */
337 fun demonstrateLocationPointUsage(locationPoint: LocationPoint) {
338 // [kotlin_LocationPoint_getPoint]
339 // Get point coordinates
340 val point = locationPoint.point
341 point?.let { demonstratePointUsage(it) }
342 // [kotlin_LocationPoint_getPoint]
343
344 // [kotlin_LocationPoint_getLocationId]
345 // Get location ID
346 val locationId = locationPoint.locationId
347 println("Location ID: $locationId")
348 // [kotlin_LocationPoint_getLocationId]
349
350 // [kotlin_LocationPoint_getSublocationId]
351 // Get sublocation ID
352 val sublocationId = locationPoint.sublocationId
353 println("Sublocation ID: $sublocationId")
354 // [kotlin_LocationPoint_getSublocationId]
355
356 // [kotlin_LocationPoint_constructor]
357 // Create new LocationPoint
358 val newPoint = Point(15.0, 25.0)
359 val newLocationPoint = LocationPoint(newPoint, locationId, sublocationId)
360 println("Created new LocationPoint: $newLocationPoint")
361 // [kotlin_LocationPoint_constructor]
362 }
363
364 /**
365 * Demonstrate Point class methods
366 */
367 fun demonstratePointUsage(point: Point) {
368 // [kotlin_Point_getX]
369 // Get X coordinate
370 val x = point.x
371 println("Point X: $x")
372 // [kotlin_Point_getX]
373
374 // [kotlin_Point_getY]
375 // Get Y coordinate
376 val y = point.y
377 println("Point Y: $y")
378 // [kotlin_Point_getY]
379
380 // [kotlin_Point_constructor]
381 // Create new Point
382 val newPoint = Point(x, y)
383 println("Created new Point: $newPoint")
384 // [kotlin_Point_constructor]
385 }
386
387 /**
388 * Demonstrate advanced routing features
389 */
390 fun demonstrateAdvancedRoutingFeatures() {
391 println("=== Advanced Routing Features ===")
392
393 val manager = routeManager ?: return
394
395 // Create multiple routes with different graph tags
396 val graphTags = listOf("main", "elevator", "stairs")
397
398 graphTags.forEach { tag ->
399 // [kotlin_RouteManager_setGraphTag_2]
400 // Set different graph tag for routing
401 manager.setGraphTag(tag)
402 // [kotlin_RouteManager_setGraphTag_2]
403
404 println("Routing with graph tag: $tag")
405
406 // Create test route
407 val startPoint = Point(0.0, 0.0)
408 val endPoint = Point(100.0, 100.0)
409 val startLocationPoint = LocationPoint(startPoint, 12345, 1)
410 val endLocationPoint = LocationPoint(endPoint, 12345, 1)
411
412 // [kotlin_RouteManager_makeRoute_2]
413 // Make route with specific graph tag
414 val routePath = manager.makeRoute(startLocationPoint, endLocationPoint)
415 // [kotlin_RouteManager_makeRoute_2]
416
417 println("Route with tag '$tag' has length: ${routePath.length} meters")
418 }
419 }
420
421 /**
422 * Demonstrate route planning simulation
423 */
424 suspend fun demonstrateRoutePlanningSimulation() {
425 println("=== Route Planning Simulation ===")
426
427 val manager = routeManager ?: return
428
429 // Create multiple target points
430 val targets = listOf(
431 LocationPoint(Point(50.0, 50.0), 12345, 1),
432 LocationPoint(Point(100.0, 100.0), 12345, 1),
433 LocationPoint(Point(150.0, 150.0), 12345, 1)
434 )
435
436 // [kotlin_RouteManager_setTarget_2]
437 // Set first target
438 manager.setTarget(targets[0])
439 // [kotlin_RouteManager_setTarget_2]
440
441 println("Set target 1: ${targets[0]}")
442 delay(1000)
443
444 // [kotlin_RouteManager_addTarget_2]
445 // Add additional targets
446 targets.drop(1).forEachIndexed { index, target ->
447 manager.addTarget(target)
448 println("Added target ${index + 2}: $target")
449 delay(1000)
450 }
451 // [kotlin_RouteManager_addTarget_2]
452
453 // [kotlin_RouteManager_cancelTarget_2]
454 // Cancel current target
455 manager.cancelTarget()
456 println("Cancelled current target")
457 // [kotlin_RouteManager_cancelTarget_2]
458
459 delay(1000)
460
461 // [kotlin_RouteManager_clearTargets_2]
462 // Clear all targets
463 manager.clearTargets()
464 println("Cleared all targets")
465 // [kotlin_RouteManager_clearTargets_2]
466 }
467
468 /**
469 * Clean up resources
470 */
471 fun cleanup() {
472 val manager = routeManager
473 val listener = routeListener
474 if (manager != null && listener != null) {
475 // [kotlin_RouteManager_removeRouteListener]
476 // Remove route listener
477 manager.removeRouteListener(listener)
478 // [kotlin_RouteManager_removeRouteListener]
479 }
480 }
481
482 /**
483 * Main demonstration method
484 */
485 suspend fun runExample() {
486 println("=== RouteManager Example ===")
487
488 demonstrateRouteManagerMethods()
489 demonstrateRouteEventTypes()
490 demonstrateTurnTypes()
491 demonstrateAdvancedRoutingFeatures()
492 demonstrateRoutePlanningSimulation()
493
494 // Wait a bit for route updates
495 delay(3000)
496
497 cleanup()
498 println("=== Example completed ===")
499 }
500}
501
502/**
503 * Function to run the example
504 */
505fun main() = runBlocking {
506 val example = RouteManagerExample()
507 example.runExample()
508}