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

我有一个自定义的路线在地图上,并希望得到MKMapView上的两个坐标之间的距离。 以下是我迄今为止所做的步骤…

  1. 我已经抓住了坐标点并准备了一个CLLocationCoordinate2D数组(像customRoute = [CLLocationCoordinate2D] )。
  2. 为了显示路线,使用坐标数组,我使用MKOverlay方法绘制了MKPolyline
  3. 并使用distanceFromLocation方法计算两个坐标之间的distanceFromLocation

当我计算距离时,得到的距离是直线距离,但不是基于方向。

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

现在我正在从用户位置找出最近的坐标,并通过循环坐标数组来计算到目的地的距离。 但是,如果有多条路线,而最近的点位于另一条路线上,则不会给出正确的结果。

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

正在使用的语言是Swift。

任何forms的帮助/build议非常感谢。

根据distanceInMeters的文档:

这种方法通过跟踪地球曲率之间的一条直线来测量两个地点之间的距离。 由此产生的弧是平滑的曲线,并没有考虑到两个位置之间的特定高度变化。

所以这个方法实际上返回一个“直线”。

据我所知,您需要在自定义路线的每个部分之间创build单独的MKRoute对象,计算这些单独的距离,然后合并它们。

正如我在这个答案中解释的,你可以通过获取MKDirectionsResponse来计算每个MKRoute的距离, MKDirectionsResponse所示:

 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