Temps estimé entre deux locations dans iOS

Quelle est la bonne façon d'get ETA (estimation de l'heure d'arrivée) de AnyLocation à MyCurrentLocation?

Je veux, lorsque j'utilise tapent sur une annotation, alors je dois définir des détails sur le pied de page en fonction de cette annotation et l'location actuel de l'user.

S'il vous plaît voir ci-dessous l'image pour une meilleure compréhension.

entrez la description de l'image ici

J'ai vu cela Quelle est la bonne façon d'get ETA (heure d'arrivée estimée) de n'importe quel endroit à mon location actuel et ce time calculé pour couvrir un voyage dans Apple Maps Mais ils n'ont pas résolu mon problème en utilisant cela. Je reçois toujours une réponse nulle à l'aide de cela. Je mets mon code ci-dessous: –

double latitude = -0.075410; double longitude = 51.512520; MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake(latitude, longitude) addressDictionary:nil] ; MKMapItem *mapItemSource = [[MKMapItem alloc] initWithPlacemark:placemark]; double latitude1 = -0.132128; double longitude1 = 51.464138; MKPlacemark *placemark1 = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake(latitude1, longitude1) addressDictionary:nil] ; MKMapItem *mapItemDestination = [[MKMapItem alloc] initWithPlacemark:placemark1]; MKDirectionsRequest *directionsRequest = [[MKDirectionsRequest alloc] init]; [directionsRequest setSource:mapItemSource]; [directionsRequest setDestination:mapItemDestination]; directionsRequest.transportType = MKDirectionsTransportTypeAutomobile; MKDirections *directions = [[MKDirections alloc] initWithRequest:directionsRequest]; [directions calculateETAWithCompletionHandler:^(MKETAResponse *response, NSError *error) { if (error) { NSLog(@"Error %@", error.description); } else { NSLog(@"expectedTravelTime %f", response.expectedTravelTime); } }]; //I am not sure why I am getting Null response into calculateETAWithCompletionHandler this method.. //Also sortinged following...... [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) { if (error) { NSLog(@"Error %@", error.description); } else { MKRoute * routeDetails = response.routes.lastObject; //[self.mapView addOverlay:routeDetails.polyline]; NSLog(@"Street %@",[placemark.addressDictionary objectForKey:@"Street"]); NSLog(@"distance %@",[NSSsortingng ssortingngWithFormat:@"%0.1f Miles", routeDetails.distance/1609.344]); NSLog(@"expectedTravelTime %@",[NSSsortingng ssortingngWithFormat:@"%0.1f minutes",routeDetails.expectedTravelTime/60]); } }]; //I am not sure why I am getting Null response into calculateDirectionsWithCompletionHandler this method.. 

Aussi, j'ai vu cela Y at-il un moyen de déterminer le time de conduite entre deux endroits en utilisant l'API Maps d'Apple? et ceci Comment calculer le time requirejs pour compléter le path entre deux endroits? . Mais RightNow, je ne veux pas utiliser l' API Google Maps Directions . Parce que mon client ne veut pas l'utiliser. Si les API Google sont gratuites, alors définitivement je l'ai préféré.

En outre, j'ai essayé distanceFromLocation méthode distanceFromLocation . Mais, je pense, Cette solution suppose une distance en ligne droite entre deux points, ce qui n'est presque jamais utile.

Existe-t-il une autre solution pour ce faire .. ??

Toute aide serait appréciée.

Essayez cette méthode. Ici, vous devez transmettre les informations de latitude et de longitude de la source et de la destination.

 NSSsortingng *strUrl = [NSSsortingng ssortingngWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f&sensor=false&mode=%@", lat, longi, userLat, userLong, @"DRIVING"]; NSURL *url = [NSURL URLWithSsortingng:[strUrl ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]]; NSData *jsonData = [NSData dataWithContentsOfURL:url]; if(jsonData != nil) { NSError *error = nil; id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; NSMutableArray *arrDistance=[result objectForKey:@"routes"]; if ([arrDistance count]==0) { NSLog(@"NA"); } else{ NSMutableArray *arrLeg=[[arrDistance objectAtIndex:0]objectForKey:@"legs"]; NSMutableDictionary *dictleg=[arrLeg objectAtIndex:0]; NSLog(@"%@",[NSSsortingng ssortingngWithFormat:@"Estimated Time %@",[[dictleg objectForKey:@"duration"] objectForKey:@"text"]]); } } else{ NSLog(@"NA"); } 

Si vous voulez calculer le time de trajet entre les points, vous devez d'abord spécifier si vous voulez des directions de conduite ou de marche, puis générer des directions. Le résultat de la request d'itinéraire comprendra une estimation du time de trajet.

Vous aurez besoin d'utiliser les classs MapKit, MKDirectionsRequest et MKDirections , entre autres. Vous devrez également configurer votre application pour requestr à Apple l'autorisation de générer des routes. J'ai trouvé ce lien en ligne qui explique comment calculer les directions de conduite.

vous pouvez utiliser Google API pour cela et encore une chose par défaut il y a la méthode

 locA = [[CLLocation alloc] initWithLatitude:[[latsArray objectAtIndex:0] floatValue] longitude:[[longArray objectAtIndex:0] floatValue]]; locB = [[CLLocation alloc] initWithLatitude:[[latsArray objectAtIndex:1] floatValue] longitude:[[longArray objectAtIndex:1] floatValue]]; distance = [locA distanceFromLocation:locB] * 0.000621371; 

et l'heure de marcher

  float time = distance / 3.1; //divide by 3.1 for by walk