从当前位置了解MapView中最近的引脚

时间:2015-08-31 11:38:01

标签: xcode swift mapkit core-location

我正在使用MapView,其中添加了一个城市内的一些引脚。此外,当前用户位置显示在地图中。有了这两件事(用户位置和引脚),我想在标签中显示用户所在的最近的引脚。

3 个答案:

答案 0 :(得分:6)

没有直接的API可以找到它。你必须循环遍历所有注释。

let pins = mapView.annotations as! [MKAnnotation]
let currentLocation = mapView.userLocation.location!

let nearestPin: MKAnnotation? = pins.reduce((CLLocationDistanceMax, nil)) { (nearest, pin) in
    let coord = pin.coordinate
    let loc = CLLocation(latitude: coord.latitude, longitude: coord.longitude)
    let distance = currentLocation.distanceFromLocation(loc)
    return distance < nearest.0 ? (distance, pin) : nearest
}.1

// Here, `nearestPin` is `nil` iff there is no annotations on the map.

如果您不了解reduce方法,请参阅the docs

答案 1 :(得分:1)

使用distanceFromLocation计算所有距离:

let distance = fromLocation.distanceFromLocation(toLocation)

您可以计算for循环中每个引脚的距离,以便找到较慢的

看看这个: Find nearest annotations from user location ios?

答案 2 :(得分:0)

您可以在单个REST请求中查看类似Mapbox Distance API的内容:https://www.mapbox.com/blog/distance-api/