您的位置:首页 > 移动开发 > IOS开发

IOS 获取地理位置信息并逆向解析

2016-03-17 23:42 471 查看
由于是初学者,思绪可能较乱,敬请见谅!

1. 首先,将CoreLocation framework mapkit.framework框架导入到工程当中并且引用

2. 添加#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>引用头文件到你写的类文件中

3.创建一个CLLocation服务的管理者CLLocationManager,设置代理。定义为全局变量方便调用

@property (strong,nonatomic)CLLocationManager *locManager;

4.实例化位置管理器并设置代理,使用startUpdatingLocation和stopUpdatingLocation来开始和结束定位

- (void)viewDidLoad

{

[super viewDidLoad];

self.locationManager = [[CLLocationManager alloc] init];

self.locationManager.delegate = self;

distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序

它的单位是米,这里设置为至少移动1000再通知委托处理更新;

self.locationManager.distanceFilter = 1000.0f; // 如果设为kCLDistanceFilterNone,则每秒更新一次;

CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

if (status == kCLAuthorizationStatusNotDetermined) {

// 如果授权状态还没有被决定就弹出提示框

} else if (status == kCLAuthorizationStatusDenied) {

// 如果授权状态是拒绝就给用户提示

} else if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) {

// 如果授权状态可以使用就开始获取用户位置

[self.locationManager startUpdatingLocation ];

}

}

//设置定位精度

// kCLLocationAccuracyNearestTenMeters:精度10米

// kCLLocationAccuracyHundredMeters:精度100 米

// kCLLocationAccuracyKilometer:精度1000 米

// kCLLocationAccuracyThreeKilometers:精度3000米

// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度

// kCLLocationAccuracyBestForNavigation:导航情况下最高精度,一般要有外接电源时才能使用

以下是 早期两个委托方法,一个是成功获得具体的坐标。另一个是失败时候的处理方法。

-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

{

CLLocationCoordinate2D loc = [newLocation coordinate];

经纬度信息

float longtitude = loc.longitude;

float latitude = loc.latitude;

使用CLGeocoder逆向解析地址

CLGeocoder *geocoder = [[CLGeocoderalloc] init];

[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks,NSError *error) {

if (placemarks.count >0 ) {

CLPlacemark * plmark = [placemarksobjectAtIndex:0];

NSString * country = plmark.country;

NSLog(@"%@",country);

}

NSLog(@"%@",placemarks);

}];

[self.locationManager stopUpdatingLocation];

}

//获取信息失败处理函数

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

{

NSlog(@"error");
[self.locationManager stopUpdatingLocation];

}

现在常用此方法来监视位置更新,当定位成功后调用

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

NSLog(@"%@", locations);

这里同样是获取地理位置信息,并用使用CLGeocoder逆向解析地址,获取具体地址。再从 CLPlacemark * plmark的各个属性中获取出自己想要的信息

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: