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;
17- (void)demonstrateRouteManagerMethods;
18- (void)demonstrateRoutePathUsage:(NSArray<NCRoutePath *> *)paths;
19- (void)demonstrateRouteEventUsage:(NCRouteEvent *)event;
20- (void)demonstrateRouteEventTypes;
21- (void)demonstrateLocationPointUsage:(NCLocationPoint *)locationPoint;
22- (void)demonstratePointUsage:(NCPoint *)point;
23- (void)demonstrateAdvancedRoutingFeatures;
24- (void)demonstrateRoutePlanningSimulation;
25- (void)cleanup;
26- (void)runExample;
27
28@end
29
30@implementation RouteManagerExample
31
32- (instancetype)init {
33 self = [super init];
34 if (self) {
35 [self initializeSdk];
36 [self setupRouteListener];
37 }
38 return self;
39}
40
42 @try {
43 // [objc_NavigineSdk_getInstance]
44 // Get SDK instance
45 self.sdk = [NCNavigineSdk getInstance];
46 // [objc_NavigineSdk_getInstance]
47
48 // [objc_NavigineSdk_setUserHash]
49 // Set user hash
50 [self.sdk setUserHash:@"USER-HASH-HERE"];
51 // [objc_NavigineSdk_setUserHash]
52
53 // [objc_NavigineSdk_setServer]
54 // Set server URL (optional)
55 [self.sdk setServer:@"https://custom.navigine.com"];
56 // [objc_NavigineSdk_setServer]
57
58 // [objc_NavigineSdk_getLocationManager]
59 // Get LocationManager for working with locations
60 self.locationManager = [self.sdk getLocationManager];
61 // [objc_NavigineSdk_getLocationManager]
62
63 // [objc_NavigineSdk_getNavigationManager]
64 // Get NavigationManager for working with navigation
65 self.navigationManager = [self.sdk getNavigationManager:self.locationManager];
66 // [objc_NavigineSdk_getNavigationManager]
67
68 // [objc_NavigineSdk_getRouteManager]
69 // Get RouteManager for working with routes
70 self.routeManager = [self.sdk getRouteManager:self.locationManager navigationManager:self.navigationManager];
71 // [objc_NavigineSdk_getRouteManager]
72
73 if (self.locationManager != nil && self.navigationManager != nil && self.routeManager != nil) {
74 NSLog(@"LocationManager, NavigationManager and RouteManager successfully initialized");
75 }
76 } @catch (NSException *exception) {
77 NSLog(@"Error initializing SDK: %@", exception.reason);
78 }
79}
80
85 // RouteListener is implemented via protocol
86 // No additional setup needed for Objective-C
87}
88
92- (void)demonstrateRouteManagerMethods {
93 if (self.routeManager == nil) {
94 NSLog(@"RouteManager not initialized");
95 return;
96 }
97
98 // [objc_RouteManager_addRouteListener]
99 // Add route listener
100 [self.routeManager addRouteListener:self];
101 // [objc_RouteManager_addRouteListener]
102
103 // [objc_RouteManager_setGraphTag]
104 // Set graph tag
105 [self.routeManager setGraphTag:@"main"];
106 // [objc_RouteManager_setGraphTag]
107
108 // [objc_RouteManager_getGraphTag]
109 // Get current graph tag
110 NSString *currentGraphTag = [self.routeManager getGraphTag];
111 NSLog(@"Current graph tag: %@", currentGraphTag);
112 // [objc_RouteManager_getGraphTag]
113
114 // [objc_RouteManager_getGraphTags]
115 // Get all graph tags
116 NSArray<NSString *> *graphTags = [self.routeManager getGraphTags];
117 NSLog(@"Available graph tags: %@", graphTags);
118 // [objc_RouteManager_getGraphTags]
119
120 // Create test points
121 NCPoint *startPoint = [[NCPoint alloc] initWithX:10.0 y:20.0];
122 NCPoint *endPoint = [[NCPoint alloc] initWithX:50.0 y:60.0];
123 NCLocationPoint *startLocationPoint = [[NCLocationPoint alloc] initWithPoint:startPoint locationId:12345 sublocationId:1];
124 NCLocationPoint *endLocationPoint = [[NCLocationPoint alloc] initWithPoint:endPoint locationId:12345 sublocationId:1];
125
126 // [objc_RouteManager_makeRoute]
127 // Make route from point to point
128 NCRoutePath *routePath = [self.routeManager makeRoute:startLocationPoint to:endLocationPoint];
129 NSLog(@"Route created with length: %f meters", [routePath getLength]);
130 // [objc_RouteManager_makeRoute]
131
132 // [objc_RouteManager_makeRoutes]
133 // Make routes to multiple destinations
134 NSArray<NCLocationPoint *> *destinations = @[
135 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:30.0 y:40.0] locationId:12345 sublocationId:1],
136 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:70.0 y:80.0] locationId:12345 sublocationId:1]
137 ];
138 NSArray<NCRoutePath *> *routePaths = [self.routeManager makeRoutes:startLocationPoint to:destinations];
139 NSLog(@"Created %lu routes", (unsigned long)routePaths.count);
140 // [objc_RouteManager_makeRoutes]
141
142 // [objc_RouteManager_setTarget]
143 // Set target point
144 [self.routeManager setTarget:endLocationPoint];
145 // [objc_RouteManager_setTarget]
146
147 // [objc_RouteManager_addTarget]
148 // Add additional target point
149 NCLocationPoint *additionalTarget = [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:90.0 y:100.0] locationId:12345 sublocationId:1];
150 [self.routeManager addTarget:additionalTarget];
151 // [objc_RouteManager_addTarget]
152
153 // [objc_RouteManager_cancelTarget]
154 // Cancel current target
155 [self.routeManager cancelTarget];
156 // [objc_RouteManager_cancelTarget]
157
158 // [objc_RouteManager_clearTargets]
159 // Clear all targets
160 [self.routeManager clearTargets];
161 // [objc_RouteManager_clearTargets]
162}
163
167- (void)demonstrateRoutePathUsage:(NSArray<NCRoutePath *> *)paths {
168 for (int i = 0; i < paths.count; i++) {
169 NCRoutePath *path = paths[i];
170 NSLog(@"=== Route Path %d ===", i + 1);
171
172 // [objc_RoutePath_getLength]
173 // Get route length
174 double length = [path getLength];
175 NSLog(@"Route length: %f meters", length);
176 // [objc_RoutePath_getLength]
177
178 // [objc_RoutePath_getPoints]
179 // Get route points
180 NSArray<NCLocationPoint *> *points = [path getPoints];
181 NSLog(@"Route has %lu points", (unsigned long)points.count);
182 for (int j = 0; j < points.count; j++) {
183 [self demonstrateLocationPointUsage:points[j]];
184 }
185 // [objc_RoutePath_getPoints]
186
187 // [objc_RoutePath_getEvents]
188 // Get route events
189 NSArray<NCRouteEvent *> *events = [path getEvents];
190 NSLog(@"Route has %lu events", (unsigned long)events.count);
191 for (int j = 0; j < events.count; j++) {
192 [self demonstrateRouteEventUsage:events[j]];
193 }
194 // [objc_RoutePath_getEvents]
195
196 // [objc_RoutePath_head]
197 // Get head of route (first 10 meters)
198 NCRoutePath *headPath = [path head:10.0];
199 if (headPath != nil) {
200 NSLog(@"Head path length: %f meters", [headPath getLength]);
201 }
202 // [objc_RoutePath_head]
203
204 // [objc_RoutePath_tail]
205 // Get tail of route (remaining after 10 meters)
206 NCRoutePath *tailPath = [path tail:10.0];
207 if (tailPath != nil) {
208 NSLog(@"Tail path length: %f meters", [tailPath getLength]);
209 }
210 // [objc_RoutePath_tail]
211 }
212}
213
217- (void)demonstrateRouteEventUsage:(NCRouteEvent *)event {
218 // [objc_RouteEvent_getType]
219 // Get event type
220 NCRouteEventType type = [event getType];
221 NSLog(@"Event type: %ld", (long)type);
222 // [objc_RouteEvent_getType]
223
224 // [objc_RouteEvent_getValue]
225 // Get event value (angle for turns, sublocation ID for transitions)
226 int32_t value = [event getValue];
227 NSLog(@"Event value: %d", value);
228 // [objc_RouteEvent_getValue]
229
230 // [objc_RouteEvent_getDistance]
231 // Get distance from route start
232 double distance = [event getDistance];
233 NSLog(@"Event distance: %f meters", distance);
234 // [objc_RouteEvent_getDistance]
235
236 // [objc_RouteEvent_constructor]
237 // Create new RouteEvent
238 NCRouteEvent *newEvent = [[NCRouteEvent alloc] initWithType:type value:value distance:distance];
239 NSLog(@"Created new RouteEvent: %@", newEvent);
240 // [objc_RouteEvent_constructor]
241}
242
246- (void)demonstrateRouteEventTypes {
247 // [objc_RouteEventType_values]
248 // Get all route event type values
249 NSArray<NSNumber *> *types = @[
250 @(NCRouteEventTypeTurnLeft),
251 @(NCRouteEventTypeTurnRight),
252 @(NCRouteEventTypeTransition)
253 ];
254 NSLog(@"Available route event types:");
255 for (NSNumber *type in types) {
256 NSLog(@" - %ld", (long)[type integerValue]);
257 }
258 // [objc_RouteEventType_values]
259}
260
264- (void)demonstrateLocationPointUsage:(NCLocationPoint *)locationPoint {
265 // [objc_LocationPoint_getPoint]
266 // Get point coordinates
267 NCPoint *point = [locationPoint getPoint];
268 if (point != nil) {
269 [self demonstratePointUsage:point];
270 }
271 // [objc_LocationPoint_getPoint]
272
273 // [objc_LocationPoint_getLocationId]
274 // Get location ID
275 int32_t locationId = [locationPoint getLocationId];
276 NSLog(@"Location ID: %d", locationId);
277 // [objc_LocationPoint_getLocationId]
278
279 // [objc_LocationPoint_getSublocationId]
280 // Get sublocation ID
281 int32_t sublocationId = [locationPoint getSublocationId];
282 NSLog(@"Sublocation ID: %d", sublocationId);
283 // [objc_LocationPoint_getSublocationId]
284
285 // [objc_LocationPoint_constructor]
286 // Create new LocationPoint
287 NCPoint *newPoint = [[NCPoint alloc] initWithX:15.0 y:25.0];
288 NCLocationPoint *newLocationPoint = [[NCLocationPoint alloc] initWithPoint:newPoint locationId:locationId sublocationId:sublocationId];
289 NSLog(@"Created new LocationPoint: %@", newLocationPoint);
290 // [objc_LocationPoint_constructor]
291}
292
296- (void)demonstratePointUsage:(NCPoint *)point {
297 // [objc_Point_getX]
298 // Get X coordinate
299 double x = [point getX];
300 NSLog(@"Point X: %f", x);
301 // [objc_Point_getX]
302
303 // [objc_Point_getY]
304 // Get Y coordinate
305 double y = [point getY];
306 NSLog(@"Point Y: %f", y);
307 // [objc_Point_getY]
308
309 // [objc_Point_constructor]
310 // Create new Point
311 NCPoint *newPoint = [[NCPoint alloc] initWithX:x y:y];
312 NSLog(@"Created new Point: %@", newPoint);
313 // [objc_Point_constructor]
314}
315
319- (void)demonstrateAdvancedRoutingFeatures {
320 NSLog(@"=== Advanced Routing Features ===");
321
322 if (self.routeManager == nil) {
323 return;
324 }
325
326 // Create multiple routes with different graph tags
327 NSArray<NSString *> *graphTags = @[@"main", @"elevator", @"stairs"];
328
329 for (NSString *tag in graphTags) {
330 // [objc_RouteManager_setGraphTag_2]
331 // Set different graph tag for routing
332 [self.routeManager setGraphTag:tag];
333 // [objc_RouteManager_setGraphTag_2]
334
335 NSLog(@"Routing with graph tag: %@", tag);
336
337 // Create test route
338 NCPoint *startPoint = [[NCPoint alloc] initWithX:0.0 y:0.0];
339 NCPoint *endPoint = [[NCPoint alloc] initWithX:100.0 y:100.0];
340 NCLocationPoint *startLocationPoint = [[NCLocationPoint alloc] initWithPoint:startPoint locationId:12345 sublocationId:1];
341 NCLocationPoint *endLocationPoint = [[NCLocationPoint alloc] initWithPoint:endPoint locationId:12345 sublocationId:1];
342
343 // [objc_RouteManager_makeRoute_2]
344 // Make route with specific graph tag
345 NCRoutePath *routePath = [self.routeManager makeRoute:startLocationPoint to:endLocationPoint];
346 // [objc_RouteManager_makeRoute_2]
347
348 NSLog(@"Route with tag '%@' has length: %f meters", tag, [routePath getLength]);
349 }
350}
351
355- (void)demonstrateRoutePlanningSimulation {
356 NSLog(@"=== Route Planning Simulation ===");
357
358 if (self.routeManager == nil) {
359 return;
360 }
361
362 // Create multiple target points
363 NSArray<NCLocationPoint *> *targets = @[
364 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:50.0 y:50.0] locationId:12345 sublocationId:1],
365 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:100.0 y:100.0] locationId:12345 sublocationId:1],
366 [[NCLocationPoint alloc] initWithPoint:[[NCPoint alloc] initWithX:150.0 y:150.0] locationId:12345 sublocationId:1]
367 ];
368
369 // [objc_RouteManager_setTarget_2]
370 // Set first target
371 [self.routeManager setTarget:targets[0]];
372 // [objc_RouteManager_setTarget_2]
373
374 NSLog(@"Set target 1: %@", targets[0]);
375 [NSThread sleepForTimeInterval:1.0];
376
377 // [objc_RouteManager_addTarget_2]
378 // Add additional targets
379 for (int i = 1; i < targets.count; i++) {
380 [self.routeManager addTarget:targets[i]];
381 NSLog(@"Added target %d: %@", i + 1, targets[i]);
382 [NSThread sleepForTimeInterval:1.0];
383 }
384 // [objc_RouteManager_addTarget_2]
385
386 // [objc_RouteManager_cancelTarget_2]
387 // Cancel current target
388 [self.routeManager cancelTarget];
389 NSLog(@"Cancelled current target");
390 // [objc_RouteManager_cancelTarget_2]
391
392 [NSThread sleepForTimeInterval:1.0];
393
394 // [objc_RouteManager_clearTargets_2]
395 // Clear all targets
396 [self.routeManager clearTargets];
397 NSLog(@"Cleared all targets");
398 // [objc_RouteManager_clearTargets_2]
399}
400
404- (void)cleanup {
405 if (self.routeManager != nil) {
406 // [objc_RouteManager_removeRouteListener]
407 // Remove route listener
408 [self.routeManager removeRouteListener:self];
409 // [objc_RouteManager_removeRouteListener]
410 }
411}
412
416- (void)runExample {
417 NSLog(@"=== RouteManager Example ===");
418
419 [self demonstrateRouteManagerMethods];
420 [self demonstrateRouteEventTypes];
421 [self demonstrateAdvancedRoutingFeatures];
422 [self demonstrateRoutePlanningSimulation];
423
424 // Wait a bit for route updates
425 [NSThread sleepForTimeInterval:3.0];
426
427 [self cleanup];
428 NSLog(@"=== Example completed ===");
429}
430
431#pragma mark - NCRouteListener
432
433// [objc_RouteListener_onPathsUpdated]
434- (void)onPathsUpdated:(NSArray<NCRoutePath *> *)paths {
435 NSLog(@"Routes updated successfully");
436 [self demonstrateRoutePathUsage:paths];
437}
438// [objc_RouteListener_onPathsUpdated]
439
440@end
441
445int main(int argc, const char * argv[]) {
446 @autoreleasepool {
447 RouteManagerExample *example = [[RouteManagerExample alloc] init];
448 [example runExample];
449 }
450 return 0;
451}