How to get lat and long coordinates from address string

16,170

Solution 1

You may find your answer in this question.

iOS - MKMapView place annotation by using address instead of lat / long By User Romes.

NSString *location = @"some address, state, and zip";
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
        [geocoder geocodeAddressString:location 
             completionHandler:^(NSArray* placemarks, NSError* error){
                 if (placemarks && placemarks.count > 0) {
                     CLPlacemark *topResult = [placemarks objectAtIndex:0];
                     MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];

                     MKCoordinateRegion region = self.mapView.region;
                     region.center = placemark.region.center;
                     region.span.longitudeDelta /= 8.0;
                     region.span.latitudeDelta /= 8.0;

                     [self.mapView setRegion:region animated:YES];
                     [self.mapView addAnnotation:placemark];
                 }
             }
         ];

A Very simple solution. But only applicable on iOS5.1 or later.

Solution 2

I used a similar approach like Vijay, but had to adjust one line of code. region.center = placemark.region.center didn't work for me. Maybe my code helps someone as well:

let location: String = "1 Infinite Loop, CA, USA"
let geocoder: CLGeocoder = CLGeocoder()
geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
    if (placemarks?.count > 0) {
        let topResult: CLPlacemark = (placemarks?[0])!
        let placemark: MKPlacemark = MKPlacemark(placemark: topResult)
        var region: MKCoordinateRegion = self.mapView.region

        region.center.latitude = (placemark.location?.coordinate.latitude)!
        region.center.longitude = (placemark.location?.coordinate.longitude)!

        region.span = MKCoordinateSpanMake(0.5, 0.5)

        self.mapView.setRegion(region, animated: true)
        self.mapView.addAnnotation(placemark)
    }
}) 

Solution 3

For swift2

var location: String = "some address, state, and zip"
        var geocoder: CLGeocoder = CLGeocoder()
        geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
            if (placemarks?.count > 0) {
                var topResult: CLPlacemark = (placemarks?[0])!
                var placemark: MKPlacemark = MKPlacemark(placemark: topResult)
                var region: MKCoordinateRegion = self.mapView.region
                region.center = placemark.region.center
                region.span.longitudeDelta /= 8.0
                region.span.latitudeDelta /= 8.0
                self.mapView.setRegion(region, animated: true)
                self.mapView.addAnnotation(placemark)
            }
        })
Share:
16,170
Chandler De Angelis
Author by

Chandler De Angelis

I am a Senior iOS Developer at Mammoth Media living in Santa Monica. Making iOS apps is my expertise, and I dabble in front end web development. You can find everything about my career, including my resume, github, linkedin, and portfolio on my personal website.

Updated on July 23, 2022

Comments

  • Chandler De Angelis
    Chandler De Angelis almost 2 years

    I have a MKMapView that has a UISearchBar on the top, and I want the user to be able to type a address, and to find that address and drop a pin on it. What I don't know is how to turn the address string into longitude and latitude, so I can make a CLLocation object. Does anyone know how I can do this?