Drawing Route Between Two Places on GMSMapView in iOS Drawing Route Between Two Places on GMSMapView in iOS ios ios

Drawing Route Between Two Places on GMSMapView in iOS


`first get all points coordinates which are coming in route then add these points latitude and longitude in path in will draw path according to that`GMSCameraPosition *cameraPosition=[GMSCameraPosition cameraWithLatitude:18.5203 longitude:73.8567 zoom:12];_mapView =[GMSMapView mapWithFrame:CGRectZero camera:cameraPosition];_mapView.myLocationEnabled=YES;GMSMarker *marker=[[GMSMarker alloc]init];marker.position=CLLocationCoordinate2DMake(18.5203, 73.8567);marker.icon=[UIImage imageNamed:@"aaa.png"] ;marker.groundAnchor=CGPointMake(0.5,0.5);marker.map=_mapView;GMSMutablePath *path = [GMSMutablePath path];   [path addCoordinate:CLLocationCoordinate2DMake(@(18.520).doubleValue,@(73.856).doubleValue)];[path addCoordinate:CLLocationCoordinate2DMake(@(16.7).doubleValue,@(73.8567).doubleValue)];GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];rectangle.strokeWidth = 2.f;rectangle.map = _mapView;self.view=_mapView;


I've written the following code which should do the trick for you:

- (void)drawRoute{    [self fetchPolylineWithOrigin:myOrigin destination:myDestination completionHandler:^(GMSPolyline *polyline)     {         if(polyline)             polyline.map = self.myMap;     }];}- (void)fetchPolylineWithOrigin:(CLLocation *)origin destination:(CLLocation *)destination completionHandler:(void (^)(GMSPolyline *))completionHandler{    NSString *originString = [NSString stringWithFormat:@"%f,%f", origin.coordinate.latitude, origin.coordinate.longitude];    NSString *destinationString = [NSString stringWithFormat:@"%f,%f", destination.coordinate.latitude, destination.coordinate.longitude];    NSString *directionsAPI = @"https://maps.googleapis.com/maps/api/directions/json?";    NSString *directionsUrlString = [NSString stringWithFormat:@"%@&origin=%@&destination=%@&mode=driving", directionsAPI, originString, destinationString];    NSURL *directionsUrl = [NSURL URLWithString:directionsUrlString];    NSURLSessionDataTask *fetchDirectionsTask = [[NSURLSession sharedSession] dataTaskWithURL:directionsUrl completionHandler:         ^(NSData *data, NSURLResponse *response, NSError *error)         {             NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];             if(error)             {                 if(completionHandler)                     completionHandler(nil);                 return;             }             NSArray *routesArray = [json objectForKey:@"routes"];             GMSPolyline *polyline = nil;             if ([routesArray count] > 0)             {                 NSDictionary *routeDict = [routesArray objectAtIndex:0];                 NSDictionary *routeOverviewPolyline = [routeDict objectForKey:@"overview_polyline"];                 NSString *points = [routeOverviewPolyline objectForKey:@"points"];                 GMSPath *path = [GMSPath pathFromEncodedPath:points];                 polyline = [GMSPolyline polylineWithPath:path];             }             // run completionHandler on main thread                                                        dispatch_sync(dispatch_get_main_queue(), ^{                 if(completionHandler)                      completionHandler(polyline);             });         }];    [fetchDirectionsTask resume];}


For swift 3 to draw polyline

func getPolylineRoute(from source: CLLocationCoordinate2D, to destination: CLLocationCoordinate2D){        let config = URLSessionConfiguration.default        let session = URLSession(configuration: config)        let url = URL(string: "https://maps.googleapis.com/maps/api/directions/json?origin=\(source.latitude),\(source.longitude)&destination=\(destination.latitude),\(destination.longitude)&sensor=true&mode=driving&key=YOURKEY")!        let task = session.dataTask(with: url, completionHandler: {            (data, response, error) in            if error != nil {                print(error!.localizedDescription)                self.activityIndicator.stopAnimating()            }            else {                do {                    if let json : [String:Any] = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]{                        guard let routes = json["routes"] as? NSArray else {                            DispatchQueue.main.async {                                self.activityIndicator.stopAnimating()                            }                            return                        }                        if (routes.count > 0) {                            let overview_polyline = routes[0] as? NSDictionary                            let dictPolyline = overview_polyline?["overview_polyline"] as? NSDictionary                            let points = dictPolyline?.object(forKey: "points") as? String                            self.showPath(polyStr: points!)                            DispatchQueue.main.async {                                self.activityIndicator.stopAnimating()                                let bounds = GMSCoordinateBounds(coordinate: source, coordinate: destination)                                let update = GMSCameraUpdate.fit(bounds, with: UIEdgeInsetsMake(170, 30, 30, 30))                                self.mapView!.moveCamera(update)                            }                        }                        else {                            DispatchQueue.main.async {                                self.activityIndicator.stopAnimating()                            }                        }                    }                }                catch {                    print("error in JSONSerialization")                    DispatchQueue.main.async {                        self.activityIndicator.stopAnimating()                    }                }            }        })        task.resume()    }    func showPath(polyStr :String){        let path = GMSPath(fromEncodedPath: polyStr)        let polyline = GMSPolyline(path: path)        polyline.strokeWidth = 3.0        polyline.strokeColor = UIColor.red        polyline.map = mapView // Your map view    }

Note : You need to put googleDirection API key in URL.