我正在使用MapView,其中添加了一个城市内的一些引脚。此外,当前用户位置显示在地图中。有了这两件事(用户位置和引脚),我想在标签中显示用户所在的最近的引脚。
答案 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循环中每个引脚的距离,以便找到较慢的
答案 2 :(得分:0)
您可以在单个REST请求中查看类似Mapbox Distance API的内容:https://www.mapbox.com/blog/distance-api/