我有一个正在使用的导航应用程序,它的用途之一是它可以计算用户放置的所有注释坐标的平均值(通过搜索表,并且当他们按结果时放置每个注释) ),然后在所有注释之间找到您可能称为的中间点。但是,此中点此刻仅按坐标移动,这意味着根据用户当前注释所在的位置,该中点可能会在湖泊或森林的中间弯曲,这没有帮助。我希望它找到最接近我的中点坐标的地址,然后将注释重定向到那里。注释的创建方法如下:
func string(from startDate: Date, to endDate: Date) -> String?
如何获取此注释“ centerPoint”以调整为最近的地址?谢谢。
答案 0 :(得分:0)
我将在此处使用反向地址编码,以返回MKPlacemark。 documentation建议通常由完成处理程序在主线程上返回一个地标,因此您可以直接使用结果来更新UI。 MKPlacemark符合注释协议,因此您可以将其直接放在地图上:
func resolveAddress(for averageCoordinate: CLLocationCoordinate2D, completion: @escaping (MKPlacemark?) -> () ) {
let geocoder = CLGeocoder()
let averageLocation = CLLocation(latitude: averageCoordinate.latitude, longitude: averageCoordinate.longitude)
geocoder.reverseGeocodeLocation(averageLocation) { (placemarks, error) in
guard error == nil,
let placemark = placemarks?.first
else {
completion(nil)
return
}
completion(MKPlacemark(placemark: placemark))
}
}
@IBAction func middleFinderButton(_ sender: Any) {
// your code to find center annotation
resolveAddress(for: centerPoint.coordinate) { placemark in
if let placemark = placemark {
self.mapView.addAnnotation(placemark)
} else {
self.mapView.addAnnotation(centerCoordinate)
}
}