Loading...
Searching...
No Matches
RouteManagerExample.m
Go to the documentation of this file.
1#import <Foundation/Foundation.h>
2#import <NavigineSDK/NavigineSDK.h>
3
8@interface RouteManagerExample : NSObject <NCRouteListener>
9
10@property (nonatomic, strong) NCNavigineSdk *sdk;
11@property (nonatomic, strong) NCLocationManager *locationManager;
12@property (nonatomic, strong) NCNavigationManager *navigationManager;
13@property (nonatomic, strong) NCRouteManager *routeManager;
14
15- (void)initializeSdk;
16- (void)setupRouteListener;
18- (void)demonstrateRoutePathUsage:(NSArray<NCRoutePath *> *)paths;
19- (void)demonstrateRouteNodeUsage:(NCRouteNode *)node;
20- (void)demonstrateRouteEventUsage:(NCRouteEvent *)event;
23- (void)demonstrateTurnEventUsage:(NCTurnEvent *)event;
24- (void)demonstrateTransitionEntryEventUsage:(NCTransitionEntryEvent *)event;
25- (void)demonstrateTransitionExitEventUsage:(NCTransitionExitEvent *)event;
26- (void)demonstrateTargetReachedEventUsage:(NCTargetReachedEvent *)event;
27- (void)demonstrateLocationPointUsage:(NCLocationPoint *)locationPoint;
28- (void)demonstratePointUsage:(NCPoint *)point;
30- (void)demonstrateRoutePlanningSimulation;
31- (void)cleanup;
32- (void)runExample;
33
34@end
35
36@implementation RouteManagerExample
37
38- (instancetype)init {
39 self = [super init];
40 if (self) {
41 [self initializeSdk];
42 [self setupRouteListener];
43 }
44 return self;
45}
46
48 @try {
49 // [objc_NavigineSdk_getInstance]
50 // Get SDK instance
51 self.sdk = [NCNavigineSdk getInstance];
52 // [objc_NavigineSdk_getInstance]
53
54 // [objc_NavigineSdk_setUserHash]
55 // Set user hash
56 [self.sdk setUserHash:@"USER-HASH-HERE"];
57 // [objc_NavigineSdk_setUserHash]
58
59 // [objc_NavigineSdk_setServer]
60 // Set server URL (optional)
61 [self.sdk setServer:@"https://custom.navigine.com"];
62 // [objc_NavigineSdk_setServer]
63
64 // [objc_NavigineSdk_getLocationManager]
65 // Get LocationManager for working with locations
66 self.locationManager = [self.sdk getLocationManager];
67 // [objc_NavigineSdk_getLocationManager]
68
69 // [objc_NavigineSdk_getNavigationManager]
70 // Get NavigationManager for working with navigation
71 self.navigationManager = [self.sdk getNavigationManager:self.locationManager];
72 // [objc_NavigineSdk_getNavigationManager]
73
74 // [objc_NavigineSdk_getRouteManager]
75 // Get RouteManager for working with routes
76 self.routeManager = [self.sdk getRouteManager:self.locationManager navigationManager:self.navigationManager];
77 // [objc_NavigineSdk_getRouteManager]
78
79 if (self.locationManager != nil && self.navigationManager != nil && self.routeManager != nil) {
80 NSLog(@"LocationManager, NavigationManager and RouteManager successfully initialized");
81 }
82 } @catch (NSException *exception) {
83 NSLog(@"Error initializing SDK: %@", exception.reason);
84 }
85}
86
91 // RouteListener is implemented via protocol
92 // No additional setup needed for Objective-C
93}
94
99 if (self.routeManager == nil) {
100 NSLog(@"RouteManager not initialized");
101 return;
102 }
103
104 // [objc_RouteManager_addRouteListener]
105 // Add route listener
106 [self.routeManager addRouteListener:self];
107 // [objc_RouteManager_addRouteListener]
108
109 // [objc_RouteManager_setGraphTag]
110 // Set graph tag
111 [self.routeManager setGraphTag:@"main"];
112 // [objc_RouteManager_setGraphTag]
113
114 // [objc_RouteManager_getGraphTag]
115 // Get current graph tag
116 NSString *currentGraphTag = [self.routeManager getGraphTag];
117 NSLog(@"Current graph tag: %@", currentGraphTag);
118 // [objc_RouteManager_getGraphTag]
119
120 // [objc_RouteManager_getGraphTags]
121 // Get all graph tags
122 NSArray<NSString *> *graphTags = [self.routeManager getGraphTags];
123 NSLog(@"Available graph tags: %@", graphTags);
124 // [objc_RouteManager_getGraphTags]
125
126 // Create test points
127 NCPoint *startPoint = [[NCPoint alloc] initWithX:10.0 y:20.0];
128 NCPoint *endPoint = [[NCPoint alloc] initWithX:50.0 y:60.0];
129 NCLocationPoint *startLocationPoint = [[NCLocationPoint alloc] initWithPoint:startPoint locationId:12345 sublocationId:1];
130 NCLocationPoint *endLocationPoint = [[NCLocationPoint alloc] initWithPoint:endPoint locationId:12345 sublocationId:1];
131
132 // [objc_RouteManager_makeRoute]
133 // Make route from point to point
134 NCRoutePath *routePath = [self.routeManager makeRoute:startLocationPoint to:endLocationPoint];
135 NSLog(@"Route created with length: %f meters", [routePath getLength]);
136 // [objc_RouteManager_makeRoute]
137
138 // [objc_RouteManager_makeRoutes]
139 // Make routes to multiple destinations
140 NSArray<NCLocationPoint *> *destinations = @[
141 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:30.0 y:40.0] locationId:12345 sublocationId:1],
142 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:70.0 y:80.0] locationId:12345 sublocationId:1]
143 ];
144 NSArray<NCRoutePath *> *routePaths = [self.routeManager makeRoutes:startLocationPoint to:destinations];
145 NSLog(@"Created %lu routes", (unsigned long)routePaths.count);
146 // [objc_RouteManager_makeRoutes]
147
148 // [objc_RouteManager_setTarget]
149 // Set target point
150 [self.routeManager setTarget:endLocationPoint];
151 // [objc_RouteManager_setTarget]
152
153 // [objc_RouteManager_addTarget]
154 // Add additional target point
155 NCLocationPoint *additionalTarget = [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:90.0 y:100.0] locationId:12345 sublocationId:1];
156 [self.routeManager addTarget:additionalTarget];
157 // [objc_RouteManager_addTarget]
158
159 // [objc_RouteManager_cancelTarget]
160 // Cancel current target
162 // [objc_RouteManager_cancelTarget]
163
164 // [objc_RouteManager_clearTargets]
165 // Clear all targets
167 // [objc_RouteManager_clearTargets]
168}
169
173- (void)demonstrateRoutePathUsage:(NSArray<NCRoutePath *> *)paths {
174 for (int i = 0; i < paths.count; i++) {
175 NCRoutePath *path = paths[i];
176 NSLog(@"=== Route Path %d ===", i + 1);
177
178 // [objc_RoutePath_getLength]
179 // Get route length
180 double length = [path getLength];
181 NSLog(@"Route length: %f meters", length);
182 // [objc_RoutePath_getLength]
183
184 // [objc_RoutePath_getWeight]
185 // Get total route weight
186 double weight = [path getWeight];
187 NSLog(@"Route weight: %f", weight);
188 // [objc_RoutePath_getWeight]
189
190 // [objc_RoutePath_getNodes]
191 // Get route nodes
192 NSArray<NCRouteNode *> *nodes = [path getNodes];
193 NSLog(@"Route has %lu nodes", (unsigned long)nodes.count);
194 for (int j = 0; j < nodes.count; j++) {
195 [self demonstrateRouteNodeUsage:nodes[j]];
196 }
197 // [objc_RoutePath_getNodes]
198
199 // [objc_RoutePath_head]
200 // Get head of route (first 10 meters)
201 NCRoutePath *headPath = [path head:10.0];
202 if (headPath != nil) {
203 NSLog(@"Head path length: %f meters", [headPath getLength]);
204 }
205 // [objc_RoutePath_head]
206
207 // [objc_RoutePath_tail]
208 // Get tail of route (remaining after 10 meters)
209 NCRoutePath *tailPath = [path tail:10.0];
210 if (tailPath != nil) {
211 NSLog(@"Tail path length: %f meters", [tailPath getLength]);
212 }
213 // [objc_RoutePath_tail]
214 }
215}
216
217- (void)demonstrateRouteNodeUsage:(NCRouteNode *)node {
218 // [objc_RouteNode_getPoint]
219 NCLocationPoint *point = [node getPoint];
221 // [objc_RouteNode_getPoint]
222
223 // [objc_RouteNode_getWeight]
224 float weight = [node getWeight];
225 NSLog(@"Node weight: %f", weight);
226 // [objc_RouteNode_getWeight]
227
228 // [objc_RouteNode_getDistance]
229 float distance = [node getDistance];
230 NSLog(@"Node distance: %f meters", distance);
231 // [objc_RouteNode_getDistance]
232
233 // [objc_RouteNode_getEvents]
234 NSArray<NCRouteEvent *> *events = [node getEvents];
235 NSLog(@"Node has %lu events", (unsigned long)events.count);
236 for (NCRouteEvent *event in events) {
237 [self demonstrateRouteEventUsage:event];
238 }
239 // [objc_RouteNode_getEvents]
240}
241
245- (void)demonstrateRouteEventUsage:(NCRouteEvent *)event {
246 // [objc_RouteEvent_getType]
247 // Get event type
248 NCRouteEventType type = [event getType];
249 NSLog(@"Event type: %ld", (long)type);
250 // [objc_RouteEvent_getType]
251
252 // [objc_RouteEvent_getTurnEvent]
253 NCTurnEvent *turnEvent = [event getTurnEvent];
254 if (turnEvent != nil) {
255 [self demonstrateTurnEventUsage:turnEvent];
256 }
257 // [objc_RouteEvent_getTurnEvent]
258
259 // [objc_RouteEvent_getTransitionEntryEvent]
260 NCTransitionEntryEvent *entryEvent = [event getTransitionEntryEvent];
261 if (entryEvent != nil) {
262 [self demonstrateTransitionEntryEventUsage:entryEvent];
263 }
264 // [objc_RouteEvent_getTransitionEntryEvent]
265
266 // [objc_RouteEvent_getTransitionExitEvent]
267 NCTransitionExitEvent *exitEvent = [event getTransitionExitEvent];
268 if (exitEvent != nil) {
270 }
271 // [objc_RouteEvent_getTransitionExitEvent]
272
273 // [objc_RouteEvent_getTargetReachedEvent]
274 NCTargetReachedEvent *targetEvent = [event getTargetReachedEvent];
275 if (targetEvent != nil) {
276 [self demonstrateTargetReachedEventUsage:targetEvent];
277 }
278 // [objc_RouteEvent_getTargetReachedEvent]
279}
280
285 // [objc_RouteEventType_values]
286 // Get all route event type values
287 NSArray<NSNumber *> *types = @[
291 ];
292 NSLog(@"Available route event types:");
293 for (NSNumber *type in types) {
294 NSLog(@" - %ld", (long)[type integerValue]);
295 }
296 // [objc_RouteEventType_values]
297}
298
300 // [objc_TurnType_values]
301 NSArray<NSNumber *> *types = @[
309 ];
310 NSLog(@"Available turn types:");
311 for (NSNumber *type in types) {
312 NSLog(@" - %ld", (long)[type integerValue]);
313 }
314 // [objc_TurnType_values]
315}
316
317- (void)demonstrateTurnEventUsage:(NCTurnEvent *)event {
318 // [objc_TurnEvent_getType]
319 NCTurnType type = [event getType];
320 NSLog(@"Turn type: %ld", (long)type);
321 // [objc_TurnEvent_getType]
322
323 // [objc_TurnEvent_getAngle]
324 int32_t angle = [event getAngle];
325 NSLog(@"Turn angle: %d", angle);
326 // [objc_TurnEvent_getAngle]
327}
328
329- (void)demonstrateTransitionEntryEventUsage:(NCTransitionEntryEvent *)event {
330 // [objc_TransitionEntryEvent_getFrom]
331 int64_t from = [event getFrom];
332 NSLog(@"Transition entry from: %lld", from);
333 // [objc_TransitionEntryEvent_getFrom]
334
335 // [objc_TransitionEntryEvent_getTo]
336 int64_t to = [event getTo];
337 NSLog(@"Transition entry to: %lld", to);
338 // [objc_TransitionEntryEvent_getTo]
339}
340
341- (void)demonstrateTransitionExitEventUsage:(NCTransitionExitEvent *)event {
342 // [objc_TransitionExitEvent_getFrom]
343 int64_t from = [event getFrom];
344 NSLog(@"Transition exit from: %lld", from);
345 // [objc_TransitionExitEvent_getFrom]
346
347 // [objc_TransitionExitEvent_getTo]
348 int64_t to = [event getTo];
349 NSLog(@"Transition exit to: %lld", to);
350 // [objc_TransitionExitEvent_getTo]
351}
352
353- (void)demonstrateTargetReachedEventUsage:(NCTargetReachedEvent *)event {
354 // [objc_TargetReachedEvent_getIndex]
355 int64_t index = [event getIndex];
356 NSLog(@"Reached target index: %lld", index);
357 // [objc_TargetReachedEvent_getIndex]
358
359 // [objc_TargetReachedEvent_getPoint]
360 NCLocationPoint *point = [event getPoint];
362 // [objc_TargetReachedEvent_getPoint]
363}
364
368- (void)demonstrateLocationPointUsage:(NCLocationPoint *)locationPoint {
369 // [objc_LocationPoint_getPoint]
370 // Get point coordinates
371 NCPoint *point = [locationPoint getPoint];
372 if (point != nil) {
373 [self demonstratePointUsage:point];
374 }
375 // [objc_LocationPoint_getPoint]
376
377 // [objc_LocationPoint_getLocationId]
378 // Get location ID
379 int32_t locationId = [locationPoint getLocationId];
380 NSLog(@"Location ID: %d", locationId);
381 // [objc_LocationPoint_getLocationId]
382
383 // [objc_LocationPoint_getSublocationId]
384 // Get sublocation ID
385 int32_t sublocationId = [locationPoint getSublocationId];
386 NSLog(@"Sublocation ID: %d", sublocationId);
387 // [objc_LocationPoint_getSublocationId]
388
389 // [objc_LocationPoint_constructor]
390 // Create new LocationPoint
391 NCPoint *newPoint = [[NCPoint alloc] initWithX:15.0 y:25.0];
392 NCLocationPoint *newLocationPoint = [[NCLocationPoint alloc] initWithPoint:newPoint locationId:locationId sublocationId:sublocationId];
393 NSLog(@"Created new LocationPoint: %@", newLocationPoint);
394 // [objc_LocationPoint_constructor]
395}
396
400- (void)demonstratePointUsage:(NCPoint *)point {
401 // [objc_Point_getX]
402 // Get X coordinate
403 double x = [point getX];
404 NSLog(@"Point X: %f", x);
405 // [objc_Point_getX]
406
407 // [objc_Point_getY]
408 // Get Y coordinate
409 double y = [point getY];
410 NSLog(@"Point Y: %f", y);
411 // [objc_Point_getY]
412
413 // [objc_Point_constructor]
414 // Create new Point
415 NCPoint *newPoint = [[NCPoint alloc] initWithX:x y:y];
416 NSLog(@"Created new Point: %@", newPoint);
417 // [objc_Point_constructor]
418}
419
424 NSLog(@"=== Advanced Routing Features ===");
425
426 if (self.routeManager == nil) {
427 return;
428 }
429
430 // Create multiple routes with different graph tags
431 NSArray<NSString *> *graphTags = @[@"main", @"elevator", @"stairs"];
432
433 for (NSString *tag in graphTags) {
434 // [objc_RouteManager_setGraphTag_2]
435 // Set different graph tag for routing
436 [self.routeManager setGraphTag:tag];
437 // [objc_RouteManager_setGraphTag_2]
438
439 NSLog(@"Routing with graph tag: %@", tag);
440
441 // Create test route
442 NCPoint *startPoint = [[NCPoint alloc] initWithX:0.0 y:0.0];
443 NCPoint *endPoint = [[NCPoint alloc] initWithX:100.0 y:100.0];
444 NCLocationPoint *startLocationPoint = [[NCLocationPoint alloc] initWithPoint:startPoint locationId:12345 sublocationId:1];
445 NCLocationPoint *endLocationPoint = [[NCLocationPoint alloc] initWithPoint:endPoint locationId:12345 sublocationId:1];
446
447 // [objc_RouteManager_makeRoute_2]
448 // Make route with specific graph tag
449 NCRoutePath *routePath = [self.routeManager makeRoute:startLocationPoint to:endLocationPoint];
450 // [objc_RouteManager_makeRoute_2]
451
452 NSLog(@"Route with tag '%@' has length: %f meters", tag, [routePath getLength]);
453 }
454}
455
459- (void)demonstrateRoutePlanningSimulation {
460 NSLog(@"=== Route Planning Simulation ===");
461
462 if (self.routeManager == nil) {
463 return;
464 }
465
466 // Create multiple target points
467 NSArray<NCLocationPoint *> *targets = @[
468 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:50.0 y:50.0] locationId:12345 sublocationId:1],
469 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:100.0 y:100.0] locationId:12345 sublocationId:1],
470 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:150.0 y:150.0] locationId:12345 sublocationId:1]
471 ];
472
473 // [objc_RouteManager_setTarget_2]
474 // Set first target
475 [self.routeManager setTarget:targets[0]];
476 // [objc_RouteManager_setTarget_2]
477
478 NSLog(@"Set target 1: %@", targets[0]);
479 [NSThread sleepForTimeInterval:1.0];
480
481 // [objc_RouteManager_addTarget_2]
482 // Add additional targets
483 for (int i = 1; i < targets.count; i++) {
484 [self.routeManager addTarget:targets[i]];
485 NSLog(@"Added target %d: %@", i + 1, targets[i]);
486 [NSThread sleepForTimeInterval:1.0];
487 }
488 // [objc_RouteManager_addTarget_2]
489
490 // [objc_RouteManager_cancelTarget_2]
491 // Cancel current target
492 [self.routeManager cancelTarget];
493 NSLog(@"Cancelled current target");
494 // [objc_RouteManager_cancelTarget_2]
495
496 [NSThread sleepForTimeInterval:1.0];
497
498 // [objc_RouteManager_clearTargets_2]
499 // Clear all targets
500 [self.routeManager clearTargets];
501 NSLog(@"Cleared all targets");
502 // [objc_RouteManager_clearTargets_2]
503}
504
508- (void)cleanup {
509 if (self.routeManager != nil) {
510 // [objc_RouteManager_removeRouteListener]
511 // Remove route listener
513 // [objc_RouteManager_removeRouteListener]
514 }
515}
516
520- (void)runExample {
521 NSLog(@"=== RouteManager Example ===");
522
523 [self demonstrateRouteManagerMethods];
524 [self demonstrateRouteEventTypes];
525 [self demonstrateTurnTypes];
526 [self demonstrateAdvancedRoutingFeatures];
527 [self demonstrateRoutePlanningSimulation];
528
529 // Wait a bit for route updates
530 [NSThread sleepForTimeInterval:3.0];
531
532 [self cleanup];
533 NSLog(@"=== Example completed ===");
534}
535
536#pragma mark - NCRouteListener
537
538// [objc_RouteListener_onPathsUpdated]
539- (void)onPathsUpdated:(NSArray<NCRoutePath *> *)paths {
540 NSLog(@"Routes updated successfully");
541 [self demonstrateRoutePathUsage:paths];
542}
543// [objc_RouteListener_onPathsUpdated]
544
545@end
546
550int main(int argc, const char * argv[]) {
551 @autoreleasepool {
552 RouteManagerExample *example = [[RouteManagerExample alloc] init];
553 [example runExample];
554 }
555 return 0;
556}