iOS.定位服务与地图应用.02.地理信息反编码
#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import <CoreLocation/CLLocationManagerDelegate.h> #import <AddressBook/AddressBook.h> @interface T20140621213001ViewController : UIViewController<CLLocationManagerDelegate> //经度 @property (weak, nonatomic) IBOutlet UITextField *txtLng; //纬度 @property (weak, nonatomic) IBOutlet UITextField *txtLat; //高度 @property (weak, nonatomic) IBOutlet UITextField *txtAlt; @property(nonatomic, strong) CLLocationManager *locationManager; @property(nonatomic, strong) CLLocation *currLocation; @property (weak, nonatomic) IBOutlet UITextView *txtView; - (IBAction)reverseGeocode:(id)sender; @end
#import "T20140621213001ViewController.h" @interface T20140621213001ViewController () @end @implementation T20140621213001ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //定位服务管理对象初始化 _locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; _locationManager.desiredAccuracy = kCLLocationAccuracyBest; _locationManager.distanceFilter = 1000.0f; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. }- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //开始定位 [_locationManager startUpdatingLocation]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; //停止定位 [_locationManager stopUpdatingLocation]; } #pragma mark Core Location委托方法用于实现位置的更新 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { _currLocation = [locations lastObject]; _txtLat.text = [NSString stringWithFormat:@"%3.5f", _currLocation.coordinate.latitude]; _txtLng.text = [NSString stringWithFormat:@"%3.5f", _currLocation.coordinate.longitude]; _txtAlt.text = [NSString stringWithFormat:@"%3.5f", _currLocation.altitude]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"error: %@",error); } - (IBAction)reverseGeocode:(id)sender { [self.txtLng resignFirstResponder]; [self.txtLat resignFirstResponder]; [self.txtAlt resignFirstResponder]; CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation:_currLocation completionHandler:^(NSArray *placemarks, NSError *error) { if ([placemarks count] > 0) { CLPlacemark *placemark = placemarks[0]; NSDictionary *addressDictionary = placemark.addressDictionary; NSString *address = [addressDictionary objectForKey:(NSString *)kABPersonAddressStreetKey]; address = address == nil ? @"": address; NSString *state = [addressDictionary objectForKey:(NSString *)kABPersonAddressStateKey]; state = state == nil ? @"": state; NSString *city = [addressDictionary objectForKey:(NSString *)kABPersonAddressCityKey]; city = city == nil ? @"": city; _txtView.text = [NSString stringWithFormat:@"%@ \n%@ \n%@",state, address,city]; } }]; } @end