ios 地理位置获取

1.在app的info.plist里添加Privacy - Location Usage Description这个key.

2.导入头文件

#import <CoreLocation/CoreLocation.h>

3.0实例化一个

@property (nonatomic,strong)CLLocationManager*locationManager;

self.locationManager = [[CLLocationManageralloc] init];        

self.locationManager.delegate = self;                           

4.0询问用户是否开启地理位置

// 前台定位授权官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键           

[self.locationManagerrequestWhenInUseAuthorization];                                

// 前后台定位授权官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键             

[self.locationManagerrequestAlwaysAuthorization];                                   


可以设置定位的精确度

externconst CLLocationAccuracy kCLLocationAccuracyBestForNavigation__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

externconst CLLocationAccuracy kCLLocationAccuracyBest;

externconst CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;

externconst CLLocationAccuracy kCLLocationAccuracyHundredMeters;

externconst CLLocationAccuracy kCLLocationAccuracyKilometer;

externconst CLLocationAccuracy kCLLocationAccuracyThreeKilometers;

self.locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;

系统会根据设置的精确度使用不同的定位方式 gps wifi 蜂窝网

5.0开始定位

[self.locationManagerrequestLocation];

这里只进行一次定位 始终定位等可以参考其他方法

6.实现CLLocationManagerDelegate

#pragma mark代理方法中监听授权的改变,被拒绝有两种情况,一是真正被拒绝,二是服务关闭了

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

{

    switch (status) {

        case kCLAuthorizationStatusNotDetermined:

        {

            NSLog(@"用户未决定");

            break;

        }

           // 系统预留字段,暂时还没用到

        case kCLAuthorizationStatusRestricted:

        {

            NSLog(@"受限制");

            break;

        }

        case kCLAuthorizationStatusDenied:

        {

           // 被拒绝有两种情况 1.设备不支持定位服务 2.定位服务被关闭

           if ([CLLocationManagerlocationServicesEnabled]) {

                NSLog(@"真正被拒绝");

                //跳转到设置界面

               NSURL *url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];

               if ([[UIApplicationsharedApplication] canOpenURL:url]) {

                    

                    [[UIApplicationsharedApplication] openURL:url options:@{}completionHandler:^(BOOL success) {

                        

                    }];

                }

            }

            else {

                NSLog(@"没有开启此功能");

            }

            break;

        }

        case kCLAuthorizationStatusAuthorizedAlways:

        {

            NSLog(@"前后台定位授权");

            break;

        }

        case kCLAuthorizationStatusAuthorizedWhenInUse:

        {

            NSLog(@"前台定位授权");

            break;

        }

            

        default:

            break;

    }

}


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

{

    NSLog(@"%@",error);

}

7.0解析获取位置信息

#pragma mark - CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations

{

    CLGeocoder * geoCoder = [[CLGeocoderalloc] init];

    [geoCoderreverseGeocodeLocation:locations.firstObject completionHandler:^(NSArray<CLPlacemark *> *_Nullable placemarks,NSError * _Nullable error) {

        

        for (CLPlacemark * placein placemarks) {

                        NSLog(@"国家:%@",place.country);

                        NSLog(@"城市:%@",place.locality);

                        NSLog(@"区:%@",place.subLocality);

                        NSLog(@"街道:%@",place.thoroughfare);

                        NSLog(@"子街道:%@",place.subThoroughfare);

        }

    }];

}


精确到街道 非常牛掰



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值