Question

I'm able to retrieve the current location in my iPad application using,

CLLocation *location = [[CLLocation alloc] initWithLatitude:[latitude floatValue]   longitude:[longitude floatValue]];
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
     {

         NSLog(@"-----------------Placemark is %@-----------------", placemarks);

          locationLabel.text = placemarks;

     }];

and the output is,

-----------------Placemark is ("South Atlantic Ocean, South Atlantic Ocean @<-42.60533670,-21.93128480> +/- 100.00m,    region (identifier <-41.51023865,-31.60774370> radius 4954476.31) <-41.51023865,-31.60774370> radius 4954476.31m"
)-----------------

Can I use the same information to just get the city and the country name? instead of the long list of information?

also, the 'locationLabel.text = placemarks' gives a warning, "Incompatible pointer types assigning to 'NSString*' from 'NSArray*_strong', which I'm unable to resolve.

Was it helpful?

Solution

Yes you can.
But you doing it a little it wrong. First of all, placemarks is an array and not a string. That's why locationLabel.text = placemarks gives a warning.

Placemarks is an array of CLPlacemarks. This is because the geocoder could return multiple results for a coordinate. In the simplest condition the first item in it should be okay.

A CLPlacemark has the property addressDictionary which contains the data of this location. You can access this data with the address property constans defined by the ABPerson header file.

For example:

Get the first placemark from the array:

CLPlacemark *place = [placemarks objectAtIndex:0];

then get the city from this placemark:

NSString *cityName = [place objectForKey: kABPersonAddressCityKey];

Don't forget to import the AVPerson header!

OTHER TIPS

your can get all following place details

        placeNameLabel.text     = [placemarks[0] name];
        addressNumberLabel.text = [placemarks[0] subThoroughfare];
        addressLabel.text       = [placemarks[0] thoroughfare];
        neighborhoodLabel.text  = [placemarks[0] subLocality];
        cityLabel.text          = [placemarks[0] locality];
        countyLabel.text        = [placemarks[0] subAdministrativeArea];
        stateLabel.text         = [placemarks[0] administrativeArea];
        zipCodeLabel.text       = [placemarks[0] postalCode];
        countryLabel.text       = [placemarks[0] country];
        countryCodeLabel.text   = [placemarks[0] ISOcountryCode];
        inlandWaterLabel.text   = [placemarks[0] inlandWater];
        oceanLabel.text         = [placemarks[0] ocean];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top