2012-11-21 162 views
0

我试过这个代码获取基于地理位置的值,但无法获取城市名称。我如何获得城市名称?如何在iphone中获取地理位置城市名称?

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    double lati = newLocation.coordinate.latitude; 
    _geo_coder_latitude_lbl.text= [[NSString stringWithFormat:@"%f",lati] retain]; 
    _geocoder_latitude_str=_geo_coder_latitude_lbl.text; 
    NSLog(@"print lat;%@",_geocoder_latitude_str); 
    double longi = newLocation.coordinate.longitude; 
    _geocoder_longitude_lbl.text= [[NSString stringWithFormat:@"%f",longi] retain]; 
    _geocoder_longitude_str=_geocoder_longitude_lbl.text; 
    NSLog(@"print lat;%@",_geocoder_longitude_str); 
    [self._geocoder reverseGeocodeLocation: locationManager.location completionHandler: 
^(NSArray *placemarks, NSError *error) 
{ 

    //Get address 
    CLPlacemark *placemark = [placemarks objectAtIndex:0]; 

    NSLog(@"Placemark array: %@",placemark.addressDictionary); 

    //String to address 

    _located_address = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; 

    //Print the location in the console 

    NSLog(@"Currently address is: %@",_located_address); 

    // _ex_map_address_lbl.text=_located_address; 

}]; 

    [self _storeList_json_parser]; 

} 

回答

2

见CLPlacemark docs[CLPlacemark locatity]将返回与地标相关的城市名称。

入住此示例代码:

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
double lati = 45.46433; 
double longi = 9.18839; 

CLLocation *location = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake(lati, longi) 
                altitude:0 
              horizontalAccuracy:0 
              verticalAccuracy:0 
                timestamp:[NSDate date]]; 

[geocoder reverseGeocodeLocation:location completionHandler: 
    ^(NSArray *placemarks, NSError *error) 
    { 
     CLPlacemark *placemark = [placemarks lastObject]; 
     if (error || !placemark) 
      return; 

     NSString *city = placemark.locality; 
     if (!city) 
      city = placemark.subAdministrativeArea; 

     NSLog(@"City for location: %@", city); 
}]; 
+0

是的,我试试这个placemark.locality一段时间,城市名的来源,但一段时间placemark.locality响应显示空值。如何我能得到城市名称标准响应。 –

+0

如果使用subAdministrativeArea进行回退,该怎么办?查看更新的代码。 –

+0

精雅,但有些标域响应显示.eg它的显示空值:标地点:哥印拜陀 标subLocality:(空) 标subAdministrativeArea:(空) 标通途:Siddhapudur路 标subThoroughfare:(空) 标名称:Siddhapudur路 标记国家:印度 Placemark administrativeAreay:泰米尔纳德邦 城市位置:哥印拜陀 笏它的显示空值的原因有时? –

相关问题