Easiest way of getting reverse geocoded current location from iOS

前端 未结 4 1463
旧时难觅i
旧时难觅i 2020-12-08 17:02

I saw from another question here : Determine iPhone user's country that it is possible to get the current country the user of the iPhone is in.

And that is quite

相关标签:
4条回答
  • 2020-12-08 17:52
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    
    CLLocation *newLocation = [[CLLocation alloc]initWithLatitude:21.1700
                                                        longitude:72.8300];
    
    [geocoder reverseGeocodeLocation:newLocation
                   completionHandler:^(NSArray *placemarks, NSError *error) {
    
                       if (error) {
                           NSLog(@"Geocode failed with error: %@", error);
                           return;
                       }
    
                       if (placemarks && placemarks.count > 0)
                       {
                           CLPlacemark *placemark = placemarks[0];
    
                           NSDictionary *addressDictionary =
                           placemark.addressDictionary;
    
                           NSLog(@"%@ ", addressDictionary);
                           NSString *address = [addressDictionary
                                                objectForKey:(NSString *)kABPersonAddressStreetKey];
                           NSString *city = [addressDictionary
                                             objectForKey:(NSString *)kABPersonAddressCityKey];
                           NSString *state = [addressDictionary
                                              objectForKey:(NSString *)kABPersonAddressStateKey];
                           NSString *zip = [addressDictionary 
                                            objectForKey:(NSString *)kABPersonAddressZIPKey];
    
    
                           NSLog(@"%@ %@ %@ %@", address,city, state, zip);
                       }
    
                   }];
    

    Result

    {
    
      City = Surat;
      Country = India;
      CountryCode = IN;
      FormattedAddressLines =     (
        Surat,
        Gujarat,
        India
    );
    Name = Surat;
    State = Gujarat;
    } 
    2012-12-20 21:33:26.284 CurAddress[4110:11603] (null) Surat Gujarat (null)
    
    0 讨论(0)
  • 2020-12-08 17:56

    I would start with the CLReverseGeocoder class.

    This stackoverflow question gets the current city and can probably be adapted for your use.

    0 讨论(0)
  • 2020-12-08 17:59

    MKReverseGeocoder is deprecated in iOS 5, now it's CLGeocoder

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
       [self.locationManager stopUpdatingLocation];
    
       CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
       [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
           for (CLPlacemark * placemark in placemarks) {
               .... = [placemark locality];
            }    
        }];
    }
    
    0 讨论(0)
  • 2020-12-08 18:01

    Following codes can be easy to retrieve full-details.

     [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
            if(placemarks.count){
    
            placeNameLabel.text = [placemarks[0] name];
            streetNumberLabel.text = [placemarks[0] subThoroughfare];
            streetLabel.text = [placemarks[0] thoroughfare];
            neighborhoodLabel.text = [placemarks[0] subLocality];
            cityLabel.text = [placemarks[0] locality];
            countyLabel.text = [placemarks[0] subAdministrativeArea];
            stateLabel.text = [placemarks[0] administrativeArea];    //or province 
            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];
            areasOfInterestLabel.text = [placemarks[0] areasOfInterest[0]];
            }
        }];
    
    0 讨论(0)
提交回复
热议问题