我在地图上有自定义路线,想要获得MKMapView
上两个坐标之间的距离。以下是我到目前为止所做的步骤......
CLLocationCoordinate2D
数组(例如,customRoute = [CLLocationCoordinate2D]
)。MKPolyline
方法绘制了MKOverlay
。distanceFromLocation
方法计算两个坐标之间的距离。当我计算距离时,得到的距离是直线距离,但不是基于方向。
假设用户位于位置A(在自定义路线上)并且想要到达位置B(在自定义路线上)。所以我想要计算的是A和B之间的距离(不是直线距离)。
现在我从用户位置找到最近的坐标,并通过循环坐标数计算到目的地的距离。但是当有多条路线并且最近的点在另一条路线上时,这并没有给出正确的结果。
我想到的一件事是在地图上设置自定义路线并找到距离,但我不知道如何实现这一目标。
使用的语言是Swift。
非常感谢任何形式的帮助/建议。
答案 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