Mapkit,如何将注释坐标更改为最近的地址?

时间:2018-10-08 21:08:45

标签: ios swift xcode annotations mapkit

我有一个正在使用的导航应用程序,它的用途之一是它可以计算用户放置的所有注释坐标的平均值(通过搜索表,并且当他们按结果时放置每个注释) ),然后在所有注释之间找到您可能称为的中间点。但是,此中点此刻仅按坐标移动,这意味着根据用户当前注释所在的位置,该中点可能会在湖泊或森林的中间弯曲,这没有帮助。我希望它找到最接近我的中点坐标的地址,然后将注释重定向到那里。注释的创建方法如下:

func string(from startDate: Date, to endDate: Date) -> String?

如何获取此注释“ centerPoint”以调整为最近的地址?谢谢。

1 个答案:

答案 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) 
    }    
}