2015-02-24 76 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