2016-05-25 4 views
-1

Я получаю широты и долготы от апи, и нужно, чтобы получить название места из этих cooridinates, так что я использую этот блок кодаКак получить название места от широты и долготы?

CLGeocoder *ceo = [[CLGeocoder alloc]init]; 

CLLocation *LocationAtual=[[CLLocation alloc] initWithLatitude:[[latlong objectForKey:@"latitude"] doubleValue] 
                longitude:[[latlong objectForKey:@"longitude"] doubleValue]]; 

NSLog(@"loc %@", LocationAtual); 

[ceo reverseGeocodeLocation:LocationAtual completionHandler:^(NSArray *placemarks, NSError *error) 
{ 
    CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
    NSLog(@"placemark %@",placemark); 
    //String to hold address 
    NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; 
    NSLog(@"addressDictionary %@", placemark.addressDictionary); 

    NSLog(@"placemark %@",placemark.region); 
    NSLog(@"placemark %@",placemark.country); // Give Country Name 
    NSLog(@"placemark %@",placemark.locality); // Extract the city name 
    NSLog(@"location %@",placemark.name); 
    NSLog(@"location %@",placemark.ocean); 
    NSLog(@"location %@",placemark.postalCode); 
    NSLog(@"location %@",placemark.subLocality); 

    NSLog(@"location %@",placemark.location); 

    NSLog(@"I am currently at %@",locatedAt); 
    NSLog(@" "); 
} 
]; 

Но когда мой контроль идет по этой линии

[ceo reverseGeocodeLocation:LocationAtual completionHandler:^(NSArray *placemarks, NSError *error) 

этот блок кода не выполнен. Контроль идет.

+0

Да, сэр, у меня проблема с этой концепцией –

+0

да, сэр, я прочитаю об этом, но вы можете мне помочь сейчас –

+0

Получите это отсюда @sandeep http://stackoverflow.com/questions/14346516/set-address -string-with-reversegeocodelocation-and-return-from-method – Vizllx

ответ

1

В viewDidLoad OfYour класса или любого другого класса просто добавить:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Add observer 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gotPlaceInfo:) name:@"gotPlaceInfoNotification" object:nil]; 
} 

//define `gotPlaceInfo`: 
-(void)gotPlaceInfo:(NSNotification *)notif{ 

NSLog(@"place mark dict is %@", notif.userInfo); 
} 

я просто добавить одну строку в ваш код:

CLGeocoder *ceo = [[CLGeocoder alloc]init]; 

    CLLocation *LocationAtual=[[CLLocation alloc] initWithLatitude:[[latlong objectForKey:@"latitude"] doubleValue] 
                 longitude:[[latlong objectForKey:@"longitude"] doubleValue]]; 

    NSLog(@"loc %@", LocationAtual); 

    [ceo reverseGeocodeLocation:LocationAtual completionHandler:^(NSArray *placemarks, NSError *error) 
    { 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 

NSDictionary *currentLocationDictionary = @{@"CLPlacemark":CLPlacemark}; 
     NSLog(@"placemark %@",placemark); 
     //String to hold address 
     NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; 
     NSLog(@"addressDictionary %@", placemark.addressDictionary); 

     NSLog(@"placemark %@",placemark.region); 
     NSLog(@"placemark %@",placemark.country); // Give Country Name 
     NSLog(@"placemark %@",placemark.locality); // Extract the city name 
     NSLog(@"location %@",placemark.name); 
     NSLog(@"location %@",placemark.ocean); 
     NSLog(@"location %@",placemark.postalCode); 
     NSLog(@"location %@",placemark.subLocality); 

     NSLog(@"location %@",placemark.location); 

     NSLog(@"I am currently at %@",locatedAt); 
     NSLog(@" "); 
NSNotification *notification2 = [NSNotification notificationWithName:@"gotPlaceInfoNotification" object:self userInfo:currentLocationDictionary]; 
    [[NSNotificationCenter defaultCenter] postNotification:notification2]; 
    } 
    ]; 

Надеюсь, что это даст вам общий уровень ning

+0

Да, сэр это работа для меня и спасибо, что поняли меня, новая концепция для меня –

+0

рад, что это вам поможет! – Alok

0

Попробуйте этот код из Ram G ответа This Question это работает для вас

- (void) getAddressFromLatLon:(CLLocation *)bestLocation 
{ 
    NSLog(@"%f %f", bestLocation.coordinate.latitude, bestLocation.coordinate.longitude); 
    CLGeocoder *geocoder = [[CLGeocoder alloc] init] ; 
    [geocoder reverseGeocodeLocation:bestLocation 
        completionHandler:^(NSArray *placemarks, NSError *error) 
    { 
     if (error){ 
      NSLog(@"Geocode failed with error: %@", error); 
      return; 
     } 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
     NSLog(@"placemark.ISOcountryCode %@",placemark.ISOcountryCode); 
     NSLog(@"locality %@",placemark.locality); 
     NSLog(@"postalCode %@",placemark.postalCode); 

    }]; 

} 
+0

хорошо сэр я пытался реализовать это –

+0

получить ту же проблему, сэр –

+0

этот блок не выполняется [геокодера reverseGeocodeLocation: bestLocation completionHandler:^(NSArray * метки, NSError * ошибка) { если (ошибка) { NSLog (@ "Ошибка геокодирования с ошибкой:% @", ошибка); возвращение; } CLPlacemark * placemark = [метки: объект: AtIndex: 0]; NSLog (@ "placemark.ISOcountryCode% @", placemark.ISOcountryCode); NSLog (@ "locality% @", placemark.locality); NSLog (@ "postalCode% @", placemark.postalCode); }]; –

 Смежные вопросы

  • Нет связанных вопросов^_^