ios有关定位 ,地理编码,反地理编码;


我们在写程序的时候,一般来说会将定位的实现写进启动程序的文档,也就是AppDelegat.m,当然,这只是一般情况,具体依现实情况而定情况而定;

1.1首先引入证书CoreLocation.fromeWork;

1.2引入头文件,

   #import <CoreLocation/CoreLocation.h>

1.3创建对象,此处为了方便,将对象设置为全局变量;

   CLLocationManager *_locationManager;

1.4初始化对象;

   _locationManager = [[CLLocationManager alloc] init];

1.5判断用户是否已授权定位;

   if (![CLLocationManager locationServicesEnabled]) {

        YiralLog(@"用户服务不可用。");

    }

    //如果没有授权,则请求用户授权;

    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {

        [_locationManager requestWhenInUseAuthorization];

        

    }else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse){

        //设置代理;

        _locationManager.delegate = self;

        //设置精度;定位精度越高越耗电;

        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

        //设置频度,没隔多少米定位一次;

        CLLocationDistance distance = 10.0;

        _locationManager.distanceFilter = distance;

        //启用定位服务;

        [_locationManager startUpdatingLocation];

    }

1.6实现代理方法;

/*

 定位协议代理方法:

 manager:当前使用的定位对象;

 locations:返回定位数据,是一个数据对象,里面是CLLocation类型;

 

 */

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

    YiralLog(@"%@",locations);

    //从数组中取出一个定位信息;

    CLLocation *location = [locations lastObject];

    //CLlocation中取出坐标;

    //CLLocationCoordinate2D:经纬度,表示坐标系;

    

    CLLocationCoordinate2D coordinate = location.coordinate;

    YiralLog(@"纬度:%f,精度:%f,海拔:%f,行走速度:%f",coordinate.latitude,coordinate.longitude,location.altitude,location.speed);

    

 //如果不需要定位服务的时候,即时关闭定位服务;

    [_locationManager stopUpdatingLocation];

  

}

需要注意的是,在ios8之后对定位的要求做出了修改,需要在info里面添加NSLocationAlwaysUsageDescription ,否则不会出现对应的效果


CLGeocoder 地理编码

地理编码:一般是知道位置(街道,门牌号)等,可以转换出地理坐标(经纬度等)

逆地理编码:知道确切的地理坐标(经纬度)转换成确切的位置(街道,门牌号码等)

创建地理编码对象;

    CLGeocoder *_geocoder;

初始化地理编码对象;

    _geocoder =[[CLGeocoder alloc] init];

在获取到确切的经纬度之后,通过确切的逆地理编码得出想要的地理位置

[_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

        CLPlacemark *placemark = [placemarks firstObject];

        YiralLog(@"%@",placemark.addressDictionary);

    }];

此处打印在控制台的是一系列的Unicode码,可以通过简单转换,得出自己想要的结论;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值