MKMapView获取自定义路线上的坐标之间的距离

时间:2015-02-24 20:03:42

标签: ios swift mkmapview mapkit cllocationdistance

我在地图上有自定义路线,想要获得MKMapView上两个坐标之间的距离。以下是我到目前为止所做的步骤......

  1. 我抓住了坐标点并准备了一个CLLocationCoordinate2D数组(例如,customRoute = [CLLocationCoordinate2D])。
  2. 为了显示路线,使用坐标数组,我使用MKPolyline方法绘制了MKOverlay
  3. 使用distanceFromLocation方法计算两个坐标之间的距离。
  4. 当我计算距离时,得到的距离是直线距离,但不是基于方向。

    假设用户位于位置A(在自定义路线上)并且想要到达位置B(在自定义路线上)。所以我想要计算的是A和B之间的距离(不是直线距离)。

    现在我从用户位置找到最近的坐标,并通过循环坐标数计算到目的地的距离。但是当有多条路线并且最近的点在另一条路线上时,这并没有给出正确的结果。

    我想到的一件事是在地图上设置自定义路线并找到距离,但我不知道如何实现这一目标。

    使用的语言是Swift。

    非常感谢任何形式的帮助/建议。

1 个答案:

答案 0 :(得分: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