Swift MapKit:计算特定路线的ETA而不是路线?

时间:2017-09-01 12:56:26

标签: ios swift mapkit

有没有办法计算路线的ETA而不仅仅是方向?方向的问题在于它仅显示最快路线的一个结果。

现在我只能找到这个:

   directions.calculateETA { (etaResponse, error) -> Void in
            if let error = error {
                print("Error while requesting ETA : \(error.localizedDescription)")
                //travelTime = "Not Available"
            }else{
                print("No error requesting ETA")
                print("\(Int((etaResponse?.expectedTravelTime)!/60)) min")
            }
        }

2 个答案:

答案 0 :(得分:2)

目前,MapKit无法为单条路线计算ETA。无论如何,为单个MKRoute调用ETA真的没有意义,因为MKRoute调用只会得到MKDirections.calculate(completionHandler:)个实例,此时你已经拥有了各条路线的旅行时间。存在单独的MKDirections.calculateETA函数,以便提供快速获取ETA的方法,因为documentation states,此方法产生的结果比calculate函数更快。

您可以像这样访问所有MKRoute的旅行时间

directions.calculate { response, error in
    guard error == nil, let response = response else {return}

    for route in response.routes {
        let eta = route.expectedTravelTime
    }
}

请注意MKETAResponse.expectedTravelTime incorporates traffic conditions进入其计算时MKRoute.expectedTravelTime uses ideal conditions,但目前MapKit没有计算具有流量的单个MKRoute对象的ETA的方法。

答案 1 :(得分:0)

MKDirections有一个calculate(completionHandler:)函数,它返回返回的MKDirectionsResponse对象中的多个路由:

directions.calculate { response, error in
    var routes = response?.routes

    let selectedRoute = routes[0]
    let distance = selectedRoute.distance
    let eta = selectedRoute.expectedTravelTime

    // …
}

routesMKRoute个对象的数组,然后您可以选择所需的对象。