ETA(预计到达时间)从任何位置到达当前位置的正确方法是什么?
想知道什么是从任何地点到我目前所在地的ETA(估计时间到达)的正确方法,考虑到以下情况:
一个。 恩。 – 我从另一个设备获得它的位置(lon / lat),并希望当其他人接我时…在这种情况下,我可以使用什么networking服务来获取用户的信息? mapkit是否提供了这种select?
湾 如果它将在服务器端完成,我将发送我的用户位置,我的服务器端程序员可以使用什么工具获取ETA信息,以便将其发回给我的用户?
谢谢大家。
我看到: 有什么方法可以使用Apple的Maps API来确定两个地点之间的驾驶时间? – 这个问题,就像我在其他地方发现的那样(据我的理解)是,google api需要使用现在没有安装在每个iOS用户上的Google Maps应用程序。
我知道这个post有点旧了,但是如果有人在iOS 7中查看答案,苹果公司在MapKit中提供了一个API来计算所有这些信息。
这里是如何使用这个API的片段
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; [request setSource:[MKMapItem mapItemForCurrentLocation]]; [request setDestination:destination]; [request setTransportType:MKDirectionsTransportTypeAutomobile]; [request setRequestsAlternateRoutes:NO]; MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) { if ( ! error && [response routes] > 0) { MKRoute *route = [[response routes] objectAtIndex:0]; //route.distance = The distance //route.expectedTravelTime = The ETA } }];
这对我来说使用route.distance从M到K的答案我正在修改本教程地图方向教程中的代码
(IBAction)routeButtonPressed:(UIBarButtonItem *)sender { MKDirectionsRequest *directionsRequest = [[MKDirectionsRequest alloc] init]; MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:thePlacemark]; [directionsRequest setSource:[MKMapItem mapItemForCurrentLocation]]; [directionsRequest setDestination:[[MKMapItem alloc] initWithPlacemark:placemark]]; directionsRequest.transportType = MKDirectionsTransportTypeAutomobile; MKDirections *directions = [[MKDirections alloc] initWithRequest:directionsRequest]; [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) { if (error) { NSLog(@"Error %@", error.description); } else { routeDetails = response.routes.lastObject; [self.mapView addOverlay:routeDetails.polyline]; self.destinationLabel.text = [placemark.addressDictionary objectForKey:@"Street"]; self.distanceLabel.text = [NSString stringWithFormat:@"%0.1f Miles", routeDetails.distance/1609.344]; self.etaLabel.text = [NSString stringWithFormat:@"%0.1f minutes",routeDetails.expectedTravelTime/60]; //self.transportLabel.text = [NSString stringWithFormat:@"%u" ,routeDetails.transportType]; self.allSteps = @""; for (int i = 0; i < routeDetails.steps.count; i++) { MKRouteStep *step = [routeDetails.steps objectAtIndex:i]; NSString *newStep = step.instructions; self.allSteps = [self.allSteps stringByAppendingString:newStep]; self.allSteps = [self.allSteps stringByAppendingString:@"\n\n"]; self.steps.text = self.allSteps; } } }]; }