获取地理位置
首先要在工程的info.plist里面添加key和value。value是你请求位置提示用户的信息,如下图。当然也可以不填。
NSLocationAlwaysUsageDescription //应用一直可以访问地理位置
NSLocationWhenInUseUsageDescription //应用在使用时访问地理位置
在使用的类里面添加头文件,并且实现CLLocationManagerDelegate代理方法,创建位置管理者locationManager
#import "ViewController.h"
//获取位置
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic,strong) CLLocationManager *locationManager;
@end
实例化位置管理者
- (void)createLocationManager{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
// [self.locationManager requestAlwaysAuthorization];
[self.locationManager requestWhenInUseAuthorization];//获取访问权限。可以在info.plist里面填写给用户的请求信息
// 设置定位精度
// kCLLocationAccuracyNearestTenMeters:精度10米
// kCLLocationAccuracyHundredMeters:精度100 米
// kCLLocationAccuracyKilometer:精度1000 米
// kCLLocationAccuracyThreeKilometers:精度3000米
// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
// kCLLocationAccuracyBestForNavigation:导航情况下最高精度,一般要有外接电源时才能使用
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
self.locationManager.distanceFilter = kCLDistanceFilterNone; // 如果设为kCLDistanceFilterNone,则每秒更新一次;
}
开始定位,结束定位
[self.locationManager startUpdatingLocation];//开始定位
[self.locationManager stopUpdatingLocation];//结束定位
定位的代理方法,以及根据经纬度计算所在的省市区街道等信息
#pragma mark - CLLocationManagerDelegate
// 地理位置发生改变时触发
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// 获取经纬度
NSLog(@"纬度:%f",newLocation.coordinate.latitude);
NSLog(@"经度:%f",newLocation.coordinate.longitude);
// 停止位置更新
[manager stopUpdatingLocation];
//根据经纬度获取省份城市
CLGeocoder *clGeoCoder = [[CLGeocoder alloc] init];
[clGeoCoder reverseGeocodeLocation:newLocation completionHandler: ^(NSArray *placemarks,NSError *error) {
for (CLPlacemark *placeMark in placemarks)
{
NSDictionary *addressDic=placeMark.addressDictionary;//地址的所有信息
NSString *state=[addressDic objectForKey:@"State"];//省。直辖市 江西省
NSString *city=[addressDic objectForKey:@"City"];//市 丰城市
NSString *subLocality=[addressDic objectForKey:@"SubLocality"];//区
// NSString *street=[addressDic objectForKey:@"Street"];//街道
NSLog(@"%@=====%@-----%@=====%@",addressDic,state,city,subLocality);
}
}];
}
// 定位失误时触发
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"error:%@----%ld",error,(long)[error code]);
if ([error code] == 1) {
//没有位置访问权限
}
}