1import kotlinx.coroutines.delay
2import kotlinx.coroutines.runBlocking
5 * RouteManager usage example for Kotlin
6 * Demonstrates working with route planning, path calculation, and navigation
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
21 * Initialize SDK and get managers
23 private fun initializeSdk() {
25 // [kotlin_NavigineSdk_getInstance]
27 sdk = NavigineSdk.getInstance()
28 // [kotlin_NavigineSdk_getInstance]
30 // [kotlin_NavigineSdk_setUserHash]
32 sdk?.setUserHash("USER-HASH-HERE")
33 // [kotlin_NavigineSdk_setUserHash]
35 // [kotlin_NavigineSdk_setServer]
36 // Set server URL (optional)
37 sdk?.setServer("https://custom.navigine.com")
38 // [kotlin_NavigineSdk_setServer]
40 // [kotlin_NavigineSdk_getLocationManager]
41 // Get LocationManager for working with locations
42 locationManager = sdk?.getLocationManager()
43 // [kotlin_NavigineSdk_getLocationManager]
45 // [kotlin_NavigineSdk_getNavigationManager]
46 // Get NavigationManager for working with navigation
47 navigationManager = sdk?.getNavigationManager(locationManager)
48 // [kotlin_NavigineSdk_getNavigationManager]
50 // [kotlin_NavigineSdk_getRouteManager]
51 // Get RouteManager for working with routes
52 routeManager = sdk?.getRouteManager(locationManager, navigationManager)
53 // [kotlin_NavigineSdk_getRouteManager]
55 if (locationManager != null && navigationManager != null && routeManager != null) {
56 println("LocationManager, NavigationManager and RouteManager successfully initialized")
58 } catch (e: Exception) {
59 System.err.println("Error initializing SDK: ${e.message}")
64 * Setup route listener
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)
73 // [kotlin_RouteListener_onPathsUpdated]
78 * Demonstrate RouteManager methods
80 fun demonstrateRouteManagerMethods() {
81 val manager = routeManager ?: run {
82 System.err.println("RouteManager not initialized")
86 val listener = routeListener ?: return
88 // [kotlin_RouteManager_addRouteListener]
90 manager.addRouteListener(listener)
91 // [kotlin_RouteManager_addRouteListener]
93 // [kotlin_RouteManager_setGraphTag]
95 manager.setGraphTag("main")
96 // [kotlin_RouteManager_setGraphTag]
98 // [kotlin_RouteManager_getGraphTag]
99 // Get current graph tag
100 val currentGraphTag = manager.getGraphTag()
101 println("Current graph tag: $currentGraphTag")
102 // [kotlin_RouteManager_getGraphTag]
104 // [kotlin_RouteManager_getGraphTags]
105 // Get all graph tags
106 val graphTags = manager.getGraphTags()
107 println("Available graph tags: $graphTags")
108 // [kotlin_RouteManager_getGraphTags]
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)
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]
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)
128 val routePaths = manager.makeRoutes(startLocationPoint, destinations)
129 println("Created ${routePaths.size} routes")
130 // [kotlin_RouteManager_makeRoutes]
132 // [kotlin_RouteManager_setTarget]
134 manager.setTarget(endLocationPoint)
135 // [kotlin_RouteManager_setTarget]
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]
143 // [kotlin_RouteManager_cancelTarget]
144 // Cancel current target
145 manager.cancelTarget()
146 // [kotlin_RouteManager_cancelTarget]
148 // [kotlin_RouteManager_clearTargets]
150 manager.clearTargets()
151 // [kotlin_RouteManager_clearTargets]
155 * Demonstrate RoutePath class methods
157 fun demonstrateRoutePathUsage(paths: List<RoutePath>) {
158 paths.forEachIndexed { index, path ->
159 println("=== Route Path ${index + 1} ===")
161 // [kotlin_RoutePath_getLength]
163 val length = path.length
164 println("Route length: $length meters")
165 // [kotlin_RoutePath_getLength]
167 // [kotlin_RoutePath_getWeight]
168 // Get total route weight
169 val weight = path.weight
170 println("Route weight: $weight")
171 // [kotlin_RoutePath_getWeight]
173 // [kotlin_RoutePath_getNodes]
175 val nodes = path.nodes
176 println("Route has ${nodes.size} nodes")
177 nodes.forEach { node ->
178 demonstrateRouteNodeUsage(node)
180 // [kotlin_RoutePath_getNodes]
182 // [kotlin_RoutePath_head]
183 // Get head of route (first 10 meters)
184 val headPath = path.head(10.0)
186 println("Head path length: ${it.length} meters")
188 // [kotlin_RoutePath_head]
190 // [kotlin_RoutePath_tail]
191 // Get tail of route (remaining after 10 meters)
192 val tailPath = path.tail(10.0)
194 println("Tail path length: ${it.length} meters")
196 // [kotlin_RoutePath_tail]
201 * Demonstrate RouteNode class methods
203 fun demonstrateRouteNodeUsage(node: RouteNode) {
204 // [kotlin_RouteNode_getPoint]
205 val point = node.point
206 demonstrateLocationPointUsage(point)
207 // [kotlin_RouteNode_getPoint]
209 // [kotlin_RouteNode_getWeight]
210 val weight = node.weight
211 println("Node weight: $weight")
212 // [kotlin_RouteNode_getWeight]
214 // [kotlin_RouteNode_getDistance]
215 val distance = node.distance
216 println("Node distance: $distance meters")
217 // [kotlin_RouteNode_getDistance]
219 // [kotlin_RouteNode_getEvents]
220 val events = node.events
221 println("Node has ${events.size} events")
222 events.forEach { event ->
223 demonstrateRouteEventUsage(event)
225 // [kotlin_RouteNode_getEvents]
229 * Demonstrate RouteEvent class methods
231 fun demonstrateRouteEventUsage(event: RouteEvent) {
232 // [kotlin_RouteEvent_getType]
234 val type = event.type
235 println("Event type: $type")
236 // [kotlin_RouteEvent_getType]
238 // [kotlin_RouteEvent_getTurnEvent]
239 val turnEvent = event.turnEvent
240 turnEvent?.let { demonstrateTurnEventUsage(it) }
241 // [kotlin_RouteEvent_getTurnEvent]
243 // [kotlin_RouteEvent_getTransitionEntryEvent]
244 val entryEvent = event.transitionEntryEvent
245 entryEvent?.let { demonstrateTransitionEntryEventUsage(it) }
246 // [kotlin_RouteEvent_getTransitionEntryEvent]
248 // [kotlin_RouteEvent_getTransitionExitEvent]
249 val exitEvent = event.transitionExitEvent
250 exitEvent?.let { demonstrateTransitionExitEventUsage(it) }
251 // [kotlin_RouteEvent_getTransitionExitEvent]
253 // [kotlin_RouteEvent_getTargetReachedEvent]
254 val reachedEvent = event.targetReachedEvent
255 reachedEvent?.let { demonstrateTargetReachedEventUsage(it) }
256 // [kotlin_RouteEvent_getTargetReachedEvent]
260 * Demonstrate RouteEventType enum values
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 ->
270 // [kotlin_RouteEventType_values]
274 * Demonstrate TurnType enum values
276 fun demonstrateTurnTypes() {
277 // [kotlin_TurnType_values]
278 val types = TurnType.values()
279 println("Available turn types:")
280 types.forEach { type ->
283 // [kotlin_TurnType_values]
286 fun demonstrateTurnEventUsage(turnEvent: TurnEvent) {
287 // [kotlin_TurnEvent_getType]
288 val type = turnEvent.type
289 println("Turn type: $type")
290 // [kotlin_TurnEvent_getType]
292 // [kotlin_TurnEvent_getAngle]
293 val angle = turnEvent.angle
294 println("Turn angle: $angle")
295 // [kotlin_TurnEvent_getAngle]
298 fun demonstrateTransitionEntryEventUsage(event: TransitionEntryEvent) {
299 // [kotlin_TransitionEntryEvent_getFrom]
300 val from = event.from
301 println("Transition entry from: $from")
302 // [kotlin_TransitionEntryEvent_getFrom]
304 // [kotlin_TransitionEntryEvent_getTo]
306 println("Transition entry to: $to")
307 // [kotlin_TransitionEntryEvent_getTo]
310 fun demonstrateTransitionExitEventUsage(event: TransitionExitEvent) {
311 // [kotlin_TransitionExitEvent_getFrom]
312 val from = event.from
313 println("Transition exit from: $from")
314 // [kotlin_TransitionExitEvent_getFrom]
316 // [kotlin_TransitionExitEvent_getTo]
318 println("Transition exit to: $to")
319 // [kotlin_TransitionExitEvent_getTo]
322 fun demonstrateTargetReachedEventUsage(event: TargetReachedEvent) {
323 // [kotlin_TargetReachedEvent_getIndex]
324 val index = event.index
325 println("Reached target index: $index")
326 // [kotlin_TargetReachedEvent_getIndex]
328 // [kotlin_TargetReachedEvent_getPoint]
329 val point = event.point
330 demonstrateLocationPointUsage(point)
331 // [kotlin_TargetReachedEvent_getPoint]
335 * Demonstrate LocationPoint class methods
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]
344 // [kotlin_LocationPoint_getLocationId]
346 val locationId = locationPoint.locationId
347 println("Location ID: $locationId")
348 // [kotlin_LocationPoint_getLocationId]
350 // [kotlin_LocationPoint_getSublocationId]
351 // Get sublocation ID
352 val sublocationId = locationPoint.sublocationId
353 println("Sublocation ID: $sublocationId")
354 // [kotlin_LocationPoint_getSublocationId]
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]
365 * Demonstrate Point class methods
367 fun demonstratePointUsage(point: Point) {
368 // [kotlin_Point_getX]
371 println("Point X: $x")
372 // [kotlin_Point_getX]
374 // [kotlin_Point_getY]
377 println("Point Y: $y")
378 // [kotlin_Point_getY]
380 // [kotlin_Point_constructor]
382 val newPoint = Point(x, y)
383 println("Created new Point: $newPoint")
384 // [kotlin_Point_constructor]
388 * Demonstrate advanced routing features
390 fun demonstrateAdvancedRoutingFeatures() {
391 println("=== Advanced Routing Features ===")
393 val manager = routeManager ?: return
395 // Create multiple routes with different graph tags
396 val graphTags = listOf("main", "elevator", "stairs")
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]
404 println("Routing with graph tag: $tag")
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)
412 // [kotlin_RouteManager_makeRoute_2]
413 // Make route with specific graph tag
414 val routePath = manager.makeRoute(startLocationPoint, endLocationPoint)
415 // [kotlin_RouteManager_makeRoute_2]
417 println("Route with tag '$tag' has length: ${routePath.length} meters")
422 * Demonstrate route planning simulation
424 suspend fun demonstrateRoutePlanningSimulation() {
425 println("=== Route Planning Simulation ===")
427 val manager = routeManager ?: return
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)
436 // [kotlin_RouteManager_setTarget_2]
438 manager.setTarget(targets[0])
439 // [kotlin_RouteManager_setTarget_2]
441 println("Set target 1: ${targets[0]}")
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")
451 // [kotlin_RouteManager_addTarget_2]
453 // [kotlin_RouteManager_cancelTarget_2]
454 // Cancel current target
455 manager.cancelTarget()
456 println("Cancelled current target")
457 // [kotlin_RouteManager_cancelTarget_2]
461 // [kotlin_RouteManager_clearTargets_2]
463 manager.clearTargets()
464 println("Cleared all targets")
465 // [kotlin_RouteManager_clearTargets_2]
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]
483 * Main demonstration method
485 suspend fun runExample() {
486 println("=== RouteManager Example ===")
488 demonstrateRouteManagerMethods()
489 demonstrateRouteEventTypes()
490 demonstrateTurnTypes()
491 demonstrateAdvancedRoutingFeatures()
492 demonstrateRoutePlanningSimulation()
494 // Wait a bit for route updates
498 println("=== Example completed ===")
503 * Function to run the example
505fun main() = runBlocking {
506 val example = RouteManagerExample()