iOS --- 定位

常用的类

  1. CLLocationManager:定位服务管理类,开启/关闭定位服务,配置定位精度,距离等等。
  2. CLGeocoder:地理位置编码类, 根据经纬度获取地理位置信息,根据地名获取位置信息。
  3. CLLocation:地理位置信息类,经纬度、海拔、速度、时间、国家等相关位置信息。
  4. CLLocationCoordinate2D:结构体只包含经纬度信息。
  5. 需要遵守CLLocationManagerDeletage

可参见帮助文档获取更多信息

iOS8定位服务设置

  1. 设置info.plist文件增加:

    NSLocationAlwaysUsageDescription, 允许获取地理位置描述
    NSLocationWhenInUseDescription, 允许获取地理位置描述

    info.plist设置

  2. 请求位置授权

    [_locationMananer requestAlwaysAuthorization];
  3. 遵守协议

    _locationManger.delegate = self
  4. 实现协议相关方法。

    //定位信息获取后调用的方法
    -(void)locationManager:didUpdateLocations:
  5. 启动定位服务

    _locationManager startUpatingLocation]; 
  6. 停止定位服务

    locationManager stopUpatingLocation]; 

以下为源码

#import "ViewController.h"
@import CoreLocation;

@interface ViewController () <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;

    //请求授权
    [_locationManager requestAlwaysAuthorization];

    //定位精度
    _locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    //发生事件的最小距离间隔
    _locationManager.distanceFilter = 1000.0f;

    [_locationManager startUpdatingLocation]; //启动定位服务.

    //根据输入的位置信息进行定位,输出相应的位置信息
    [[[CLGeocoder alloc] init] geocodeAddressString:@"北京" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        NSLog(@"geocode placemark count:%d", (int)placemarks.count);
        for (CLPlacemark *placemark in placemarks) {
            NSLog(@"%@\n", placemark.location);
        }
    }];
}

#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    CLLocation *location = [locations lastObject];

    /*当定位成功后,如果horizontalAccuracy大于0,说明定位有效 
     horizontalAccuracy,该位置的纬度和经度确定的圆的中心,并且这个值表示圆的半径。负值表示该位置的纬度和经度是无效的。 
     */ 
    NSLog(@"lat:%.3f, log:%.3f", location.coordinate.latitude, location.coordinate.longitude);
  if(location.horizontalAccuracy > 0){//定位数据有效
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    //反地理位置编码
    [geocoder reverseGeocodeLocation:location
                   completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
                       NSLog(@"placemark count:%d", (int)placemarks.count);

                       for (CLPlacemark *placemark in placemarks) {
                           NSLog(@"%@", placemark.addressDictionary);
                       }
                    }];

    [manager stopUpdatingLocation]; //结束定位服务
   } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值