适用于多个目的地和单一来源的iOS MKDirections

时间:2014-04-16 08:47:38

标签: ios mkmapview mapkit

我的应用程序需要从一组10中获得“最接近”的用户步行点。我已经看到MKDirections使用“calculateDirectionsWithCompletionHandler”为单个源目标位置执行此操作。我的问题是,我是否已经做了10个请求,然后检查哪一个是距离最近的一个,或者有一种方法可以发送多个目的地并且响应将是最接近的一个?

谢谢

2 个答案:

答案 0 :(得分:1)

据我所知,无法为MKDirections请求指定两个以上的点数。您提出的创建10个单独请求的解决方案应该在理论上有效,但请记住:

  1. MKDirections不会在设备上本地计算路线,而是伸出到计算它们并返回响应的远程API。如果您正在计算10条路线,则在等待返回所有结果时,用户可能会有明显的延迟。

  2. 由于路线是使用远程API计算的,因此Apple可能会对此类事情感到不满 - 如果您过于频繁地使用他们的路线API,他们可能会限制您,或者他们可能会拒绝该应用#39;如果他们发现这种情况发生,就会提交给App Store。

  3. 我不确定您的确切要求,但根据您所需的准确度,一种解决方案可能是使用haversine formula计算起点和每个终点之间的距离,这将给出你这两个点之间的距离就像乌鸦一样。因为您正在计算步行路线(与驾驶相反,您只限于遵循特定道路并受交通限制),距离这些计算的最近距离可能是实际步行距离最近/时间,然后您可以针对这些详细信息发出单个MKDirections请求。

答案 1 :(得分:0)

//试试这个annotation.coordinate是位置和ULManager.location //作为用户位置

        let dirRe = MKDirectionsRequest()
        dirRe.source = MKMapItem(placemark: MKPlacemark(coordinate:          (self.ULManager.location?.coordinate)!, addressDictionary: nil))
        dirRe.destination = MKMapItem(placemark: MKPlacemark(coordinate: (annotation.coordinate), addressDictionary: nil))
        dirRe.transportType = .Walking
        let requestAll = MKDirections(request: dirRe)

        requestAll.calculateDirectionsWithCompletionHandler ({
            (response: MKDirectionsResponse?, error: NSError?) in
               // do your staff here
        })