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

iOS获取地理位置,根据经纬度获取省市街道

2016-09-06 11:10 183 查看

获取地理位置

首先要在工程的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) {
//没有位置访问权限
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: