2017-08-24 100 views
2

Want like this

+0

檢查這個https://stackoverflow.com/questions/23529970/ios-mapkit-connect-multiple-points-on-map-over-roads/23818032#23818032 –

+0

RouteObject在這個怎麼樣,你有一個完整的文件或項目 –

+1

Vikas Rajput路由將創建兩個點的起點和終點。位置更新最後一點,你可以做出前一點,並可以創建路線 –

回答

1

使用MapKit

你需要讓你的[directionRequest setRequestsAlternateRoutes:YES]然後response.routes你會得到可用路由

如在MKDirectionsRequest聲明

open var requestsAlternateRoutes: Bool // if YES and there is more than one reasonable way to route from source to destination, allow the route server to return multiple routes. Default is NO.

完整代碼

目標C

- (void)createRouteFrom:(CLLocationCoordinate2D)from to:(CLLocationCoordinate2D)destination{ 
    if(CLLocationCoordinate2DIsValid(from) && CLLocationCoordinate2DIsValid(destination)) 
    { 
     MKDirectionsRequest * directionRequest = [[MKDirectionsRequest alloc]init]; 
     [directionRequest setSource:[[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:from]]]; 
     [directionRequest setSource:[[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:destination]]]; 
     [directionRequest setTransportType:MKDirectionsTransportTypeAutomobile]; 
     [directionRequest setRequestsAlternateRoutes:YES]; 

     MKDirections * directions = [[MKDirections alloc] initWithRequest:directionRequest]; 

     [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) { 
      if(error == nil) 
      { 
       for (MKRoute * rute in response.routes) { 
        //DO WHAT YOU NEED WITH ROUTE 
       } 

       //here I add the first route 
       MKRoute * firstOne = response.routes.firstObject; 
       [self.map addOverlay:firstOne.polyline level:MKOverlayLevelAboveRoads]; 

       MKMapRect rect = [firstOne.polyline boundingMapRect]; 
       [self.map setRegion:MKCoordinateRegionForMapRect(rect) animated:YES]; 
      } 
     }]; 
    } 
} 

定義

斯威夫特

func createRouteTo(from: CLLocationCoordinate2D,to: CLLocationCoordinate2D) { 

     if(CLLocationCoordinate2DIsValid(from) && CLLocationCoordinate2DIsValid(to)) 
     { 
      self.showLoading(message: "Creando Ruta...") 
      let directionRequest = MKDirectionsRequest() 
      directionRequest.source = MKMapItem(placemark: MKPlacemark(coordinate: from, addressDictionary: nil)) 
      directionRequest.destination = MKMapItem(placemark: MKPlacemark(coordinate: to, addressDictionary: nil)) 
      directionRequest.transportType = .automobile 
      //THIS MAKE the request for multiple routes if possible 
      directionRequest.requestsAlternateRoutes = true 

      // Calculate the direction 
      let directions = MKDirections(request: directionRequest) 

      directions.calculate { [unowned self] (directionResponse, error) in 
       self.hideLoading(withDelay: 0.1) 
       guard let response = directionResponse else { 
        if let error = error { 
         print("Error: \(error)") 
         let alert = UIAlertController.init(title:"Error Creando Ruta", 
                  message:error.localizedDescription, preferredStyle: .alert) 
         alert.addAction(UIAlertAction.init(title: "Aceptar", style: .destructive, handler:nil)) 
         self.present(alert, animated:true , completion:nil) 
        } 

        return 
       } 

       if(self.currentRouteOverlay != nil) 
       { 
        self.mapView.remove(self.currentRouteOverlay!) 
       } 


       //in response.routes you will get the routes avaiables 
       for route in response.routes 
       { 
        //Do what you need with the routes 

       } 

       //here I add the first to the MapView 
       let route = response.routes[0] 
       self.currentRouteOverlay = route.polyline 
       self.mapView.add(route.polyline, level: .aboveRoads) 

       let rect = route.polyline.boundingMapRect 
       self.mapView.setRegion(MKCoordinateRegionForMapRect(rect), animated: true) 
      } 
     } 

    } 

希望這有助於

1

使用本: -

NSString *baseUrl=[NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/directions/json? origin=indore&destination=bhopal&key=%@&alternatives=true」,APIKey]; 

NSURL *url = [NSURL URLWithString:[baseUrl 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSURLSessionConfiguration *defaultConfigObject = 
[NSURLSessionConfiguration defaultSessionConfiguration]; 
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: 
defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]]; 


NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:url 
                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    if(error == nil) 
    { 
     NSDictionary *result= [NSJSONSerialization JSONObjectWithData:data 
options:0 error:nil]; 
// this will return all possible roots 
NSArray *routes = [result objectForKey:@"routes"]; 
//add The polyline between locations.  
    } 

}]; 

[dataTask resume];  
相關問題