iOS.位置決めサービスと地図アプリケーション.地理情報逆符号化

7929 ワード

#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:@"%@ 
%@
%@
",state, address,city]; } }]; } @end