2015-02-24 65 views
0

我在地圖上有一個自定義路線,並且想要獲得MKMapView上兩個座標之間的距離。下面是MKMapView在定製路線上獲得座標之間的距離

  1. 我已經抓住了座標點,並準備了CLLocationCoordinate2D陣列(比如,customRoute = [CLLocationCoordinate2D])到目前爲止,我已經做的步驟...。
  2. 要顯示路線,使用座標數組,我使用MKOverlay方法繪製了MKPolyline
  3. 並使用distanceFromLocation方法計算兩個座標之間的距離。

當我計算距離時,結果距離是一條直線距離,但不是基於方向。

假設用戶位於位置A(在自定義路線上)並且想要到達位置B(在自定義路線上)。所以我想要計算的是A和B之間的距離(不是直線距離)。

現在我正在找出用戶位置的最近座標,並通過循環座標數組來計算到目的地的距離。但是,當有多條路線並且最近的點在另一條路線上時,這不會給出正確的結果。

我想到的一件事是在地圖上設置自定義方向並找到距離,但我不知道如何實現這一點。

正在使用的語言是Swift。

任何形式的幫助/建議,非常感謝。

回答

2

According to the docs on distanceInMeters:

該方法通過追蹤 下面地球的曲率它們之間的線測量的兩個位置之間的距離。產生的弧線是平滑的曲線,並且不考慮兩個位置之間的特定高度變化。

所以該方法實際上返回一條「直線」。

據我所知,您需要在自定義路線的每個部分之間創建單獨的MKRoute對象,計算這些單獨的距離,然後合併它們。

正如我在this答案已經解釋了,你可以通過取得MKDirectionsResponse像這樣計算出每個個體MKRoute的距離:

let request:MKDirectionsRequest = MKDirectionsRequest() 

// source and destination are the relevant MKMapItems 
request.setSource(source) 
request.setDestination(destination) 

// Specify the transportation type 
request.transportType = MKDirectionsTransportType.Automobile; 

// If you're open to getting more than one route, 
// requestsAlternateRoutes = true; else requestsAlternateRoutes = false; 
request.requestsAlternateRoutes = true 

let directions = MKDirections(request: request) 

directions.calculateDirectionsWithCompletionHandler ({ 
    (response: MKDirectionsResponse?, error: NSError?) in 

    if error == nil { 
     self.directionsResponse = response 
    } 
}) 

然後讓像這樣的距離:

let route = directionsResponse.routes[currentRoute] as MKRoute 
let distance = route.distance 
+0

我有點感覺這是完成它的唯一方法。問題是我已經設置的路線在ios地圖上沒有方向,那麼這是否考慮了我設置的自定義路線並根據我提供的座標計算距離? – 2015-02-24 20:55:22

+0

@SrujanSimha也許我沒有足夠清楚地解釋它,但我認爲你必須一件件地做到這一點......就像從A點到B點的計算,然後B點到C點等等,然後加起來所有的距離。 – 2015-02-24 20:57:00

相關問題