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