0

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

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

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

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

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

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

使用的语言是 Swift。

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

4

1 回答 1

2

根据以下文档distanceInMeters

这种方法通过追踪它们之间的一条遵循地球曲率的线来测量两个位置之间的距离。生成的弧线是一条平滑曲线,没有考虑两个位置之间的特定高度变化。

所以该方法实际上返回了一条“直线”。

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

正如我在这个答案中解释的那样,您可以通过获取类似内容来计算每个单独的 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
于 2015-02-24T20:38:26.940 回答