9

考虑到以下情况,想知道什么是从任何位置到我当前位置的 ETA(预计到达时间)的正确方法:

一种。前任。- 我从另一台设备获得了它的位置(经度/纬度),并且想知道其他人何时接我......在这种情况下,我可以使用什么网络服务来为用户获取此信息?mapkit 是否提供这种选项?

湾。如果它将在服务器端完成并且我只发送我的用户位置,我的服务器端程序员可以使用哪些工具来获取 ETA 信息以便将其发送回我的用户?

谢谢大家。

我看到了:有没有办法使用 Apple 的 Maps API 确定两个地点之间的行驶时间? - 问题,正如我在其他地方发现的那样,(据我了解)是谷歌 api 需要使用谷歌地图应用程序,而现在每个 iOS 用户都没有安装。

4

2 回答 2

19

我知道这篇文章有点老了,但如果有人正在寻找答案,因为 iOS 7 Apple 在 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
        }
    }];
于 2014-01-03T09:32:09.573 回答
5

这对我有用,使用从 M 到 K 的答案的 route.distance 我正在修改本教程地图方向教程中的代码

(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;


            }
        }

    }];
}
于 2014-03-21T04:28:23.923 回答