Search code examples
iosobjective-cxcodegoogle-mapsgoogle-maps-sdk-ios

Google Maps SDK for IOS Directions


I created a simple IOS application with GMS. I added some marks to specific locations. I just want to need when user tap the marker my application should draw a line between user location and to tapped marker. I didn't find markers did tapped method.

- (void)viewDidLoad {
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                        longitude:151.2086
                                                             zoom:12];

mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.settings.compassButton = YES;
mapView_.settings.myLocationButton = YES;

mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.myLocationEnabled = YES;
self.view = mapView_;





GMSMarker *marker1 = [[GMSMarker alloc] init];
marker1.position = CLLocationCoordinate2DMake(40.992735,28.789164);
marker1.title = @"ASD";
marker1.map = mapView_;

My app is opening in my current location with LocationServices. I just want to get direction between user and user tapped marks. How can i do this ?

Thank you ! Have a nice day everyone.


Solution

  • In -(void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker// This method will get call after taping marker pin(GMSMapView map view delegate method).
    { get the latitude and longitude of that marker.
    
    }
    
    Take the latitude and longitude of current location
    
    Now Draw route between two location
    //Download LRouteController from this link  https://github.com/lukagabric/LRouteController
    
    //This will draw link between two co-ordinate
    //In .h File declare LRouteController *_routeController;
     if ([_coordinates count] > 1)
        {
            //Draw line between two co-ordinate
            [_routeController getPolylineWithLocations:_coordinates travelMode:TravelModeDriving andCompletitionBlock:^(GMSPolyline *polyline, NSError *error) {
                if (error)
                {
                    NSLog(@"%@", error);
                }
                else if (!polyline)
                {
                    NSLog(@"No route");
                    [_coordinates removeAllObjects];
                    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"No route" message:@"No route available for this route." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                    [alert show];
                }
                else
                {
                    //Drow route
                    _markerStart.position = [[_coordinates objectAtIndex:0] coordinate];
                    _markerStart.map = googleMapview;
    
                    _markerFinish.position = [[_coordinates lastObject] coordinate];
                    _markerFinish.map = googleMapview;
    
                    _polyline = polyline;
                    _polyline.strokeWidth = 3;
                    _polyline.strokeColor = [UIColor blueColor];
                    _polyline.map = googleMapview;
                }
            }];
        }
    
    
    //If you are unable to get taped pin latitude and longitude the you can use custom GMSMarker
    Ex: @interface MapMarker : GMSMarker //Create new file of GMSMarker
    @property (nonatomic, strong) coOrdinateData *data;(CoOrdinateData is NSObject class declare lat and long value)
    @end
    
    While adding marker on map use 
     MapMarker *marker= [[MapMarker alloc]init];
    
                [marker setPosition:CLLocationCoordinate2DMake(LocationAtual.coordinate.latitude,LocationAtual.coordinate.longitude)];
      marker.data=data;//Take lat and long value in object class and pass object class in marker object
    After typing on map marker you can get value like
    -(void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker
    {
    NSString *strLat = ((MapMarker *)marker).data.lat ;
    NSString *strLong = ((MapMarker *)marker).data.long ;
    //Add both the current location and marker  latitude and longitude in _coordinates and draw route.
    }