TheRedCamaro3.0 3.0
TheRedCamaro3.0 3.0

Reputation: 831

MKMapItem Center for creating annotations

I am trying to perform an MKLocalSearch.Request() and display the result on my mapView similar to this tutorial however when I do the search the coordinates returned are off center from where they should be. Where the map displays Brooklyn as an overlay in the center of the borough correctly the annotation is far off center to the left. I've noticed that there are two sets of coordinates contained in MKMapItem one the location and the other shown as center when printed to the console. I am not sure how to access the center coordinate but the center coordinate is the correct one in the middle of the screen. How can I access the center coordinate to use as the MKAnnotation's coordinate? Thank you

Search Code

let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = "brooklyn"
searchRequest.region = MKCoordinateRegion(center: CLLocationCoordinate2DMake(40.758896, -73.985130), latitudinalMeters: 2000, longitudinalMeters: 2000)
let search = MKLocalSearch(request: searchRequest)

search.start { (response, error) in
    if let error = error{
        print("Error performing search for location")
    }

    if let response = response{
        for item in response.mapItems{
            print("map item returned: \(item)")

            print("latitude: \(item.placemark.coordinate.latitude) longitude: \(item.placemark.coordinate.longitude)")
            let annotation = MKPointAnnotation()
            annotation.coordinate = item.placemark.coordinate
            annotation.title = item.name
            self.mapView.addAnnotation(annotation)
        }
    }
}

Output

map item returned: Optional(CLCircularRegion (identifier:'<+40.64529796,-73.94483550> radius 14090.15', center:<+40.64529796,-73.94483550>, radius:14090.15m)) latitude: 40.6924599 longitude: -73.9903805

Upvotes: 0

Views: 488

Answers (2)

SwiftDevStudent
SwiftDevStudent

Reputation: 49

The response has a property called boundingRegion which is an MKCoordinateRegion, so for example you can access it with

  response.boundingRegion

Upvotes: -1

TheRedCamaro3.0 3.0
TheRedCamaro3.0 3.0

Reputation: 831

I was able to access the center by casting the region property of MKMapItem's placemark property from CLRegion to CLCircularRegion.

            if let response = response{
                for item in response.mapItems{
                    print("map item returned: \(item.placemark)")
                    if let region = item.placemark.region as? CLCircularRegion{
                        print("region.center: \(region.center)")
                        let annotation = MKPointAnnotation()
                        annotation.coordinate = region.center
                        annotation.title = item.name
                        self.mapView.addAnnotation(annotation)
                    }

                }

Upvotes: 0

Related Questions