Deep Map SDK iOS

Getting started with routing

In this part we take a look at how a route from point A to point B on the map can be created. To do this we create two members for our example view: startPoint and endPoint. 

We also need to know if we already have set a start point once we want to create a route. Finally, if we want to draw a route to another location, we have to remove the previous route. We must therefore store the ID of the routing line as well. 

Objective-C

// ViewController.m
@interface ViewController ()
{
@private
    BOOL _startPointSet;
    HDMMapCoordinate _startPoint;
}
@end

Swift

// ViewController.swift
class ViewController: HDMMapViewController, HDMMapViewControllerDelegate {
        var startPoint : HDMMapCoordinate?
        ...
}

 

To create a route, we need to determine start and end points on the map. In this tutorial, we will do this with two interaction methods: tappedAtCoordinate and longPressedAtCoordinate.

First lets take a look at how to set our start point for the route. This is quite simple, we just use the point provided by our longPressedAtCoordinate callback:

Objective-C

// ViewController.m
- (void)mapViewController:(HDMMapViewController *)controller longPressedAtCoordinate:(HDMMapCoordinate)coordinate features:(NSArray<HDMFeature *> *)features {
    NSLog(@"Set routing start point!");
    _startPoint = coordinate;
}

Swift

// ViewController.swift    
   func mapViewController(_ controller: HDMMapViewController, longPressedAt coordinate: HDMMapCoordinate, features: [HDMFeature]){
        print("Set routing start point!")
        self.startPoint = coordinate
    }

 

Next, we must create the route. In this tutorial we just create a route from our start point (set by long-press) to the end point which we now set with the tappedAtCoordinate callback:

Objective-C

// ViewController.m
-(void)mapViewController:(HDMMapViewController *)controller tappedAtCoordinate:(HDMMapCoordinate)coordinate features:(NSArray *)featureRefs {    
    if(_startPoint) {
                HDMLocation *start = [HDMLocation locationWithCoordinate:_startPoint];
                HDMLocation *dest = [HDMLocation locationWithCoordinate:coordinate];
                HDMRoutingPathFeature *routeInfo = [self.mapViewController.routing calculateRouteFromLocation:start toDestination:dest];
                [self.mapViewController.mapView navigateWithPath:routeInfo usingTrackingMode:HDMUserTrackingModeFollow];  
    }
}

Swift

// ViewController.swift
func mapViewController(_ controller: HDMMapViewController, tappedAt coordinate: HDMMapCoordinate, features: [HDMFeature]) {
        guard let startPoint = self.startPoint else {return}
        //1
        guard let routing = controller.routing else {return}
    //2
        guard let route = routing.calculateRoute(from: startPoint, to: coordinate) else {return}
        self.mapView.navigate(withPath:route, using: HDMUserTrackingModeNone)
}

 

That's it! 

In order to create a route on the map, hold your finger down on a point, then tap somewhere else on the map. You should now see a routing line appear that will look like this: