2017-09-01 66 views
2

有沒有一種方法可以計算路線的ETA而不只是一個方向?方向的問題在於,它只顯示了最快的路線的一個結果。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") 
      } 
     } 

回答

1

目前,MapKit沒有任何方法來計算一個ETA只爲一個單一的路線。由於您只能通過MKDirections.calculate(completionHandler:)調用獲得MKRoute實例,因此您無法將ETA調用爲單個MKRoute,此時您已擁有單個路由的行程時間。單獨的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.expectedTravelTimeincorporates traffic conditions到它的計算,而MKRoute.expectedTravelTimeuses ideal conditions,但此刻,MapKit沒有一種方法計算具有流量的單個MKRoute對象的ETA。

+0

但我認爲,計算忽略交通和calculateETA不。我錯了嗎? –

+0

你是對的,'MKRoute'的'expectedTravelTime'屬性反映的是理想情況下的旅行時間,但是仍然沒有辦法用單一路線的交通狀況來計算ETA。您只能使用最快路線的交通狀況來計算ETA。可悲的是'MapKit'在很多方面仍然落後於GoogleMaps,所以如果你真的需要這個功能,你應該看看Google Maps API。 –

+1

然後切換到Google。謝謝! –

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對象的數組然後你可以挑選出你想要的。

+0

計算路線不僅僅是計算ETA和OP詢問ETA ... –

+0

@DávidPásztor已更新,以顯示如何從路線 – Paolo

+0

獲取距離和預計行程時間但我認爲計算忽略了Traffic並且計算了不是。我錯了嗎? –