zoukankan      html  css  js  c++  java
  • iOS定位开发之CoreLocation

    有时候我们并不需要查看地图,而仅仅需要自己的当前位置就可以,这时候就没有必要去使用MapKit可,直接使用定位服务就好了

    苹果提供了CoreLocation框架来做定位功能

    首先要想项目中导入CoreLocation框架

    定位服务开启之前最好查看一下定位服务是否可用,有可能用户已经拒绝或者用户手机定位模块有问题,无法定位

    定位服务是由CLLocationManager来管理的

    定位成功等信息也是通过代理发送给对象的,另外定位中经常需要用到地理位置的解码和反解码(其实就是经纬度和地名之间的转换)

    下面的范例代码有基本的使用方式和注意点

    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    
    @interface ViewController () <CLLocationManagerDelegate>
    {
        // 定位服务管理器
        CLLocationManager *_locationManager;
        
        // 使用地理编码器
        CLGeocoder          *_geocoder;
    }
    
    @end
    
    @implementation ViewController
    /**
     1. 在开发LBS类的应用时,获取用户定位信息之前,一定要判断一下定位服务是否允许
     
     + locationServicesEnabled
     
     2. 开启定位,获取自己的当前位置
     [_locationManager startUpdatingLocation];
     
     3. 根据经纬度,知道准确的地名
        reverseGeocodeLocation
     
     4. 根据定名,获取到经纬度
        应用场景:导航
     
        geocodeAddressString
     */
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        if (![CLLocationManager locationServicesEnabled]) {
            NSLog(@"定位服务不可用!");
            return;
        }
        
        NSLog(@"定位服务可用!");
        _locationManager = [[CLLocationManager alloc] init];
        
        // 定位用户位置,开始更新用户位置
    //    [_locationManager startUpdatingLocation];
        
        // 设置代理
        _locationManager.delegate = self;
        
        // 实例化地理编码器
        _geocoder = [[CLGeocoder alloc] init];
        
        [_geocoder geocodeAddressString:@"中山门" completionHandler:^(NSArray *placemarks, NSError *error) {
            
            for (CLPlacemark *placemark in placemarks) {
                NSLog(@"%@ %lu", placemark, (unsigned long)placemarks.count);
            }
        }];
    }
    
    #pragma mark - 更新位置代理方法
    #pragma mark 只要位置变化,就会被调用,费电!如果地位完成,最好及时关闭定位功能!
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
        NSLog(@"位置变化: %@", locations[0]);
        
        // 根据经纬度查找(去苹果后台查找准确的位置,必须联网才能用)
        [_geocoder reverseGeocodeLocation:locations[0] completionHandler:^(NSArray *placemarks, NSError *error) {
            
            NSLog(@"%@", placemarks[0]);
        }];
    }
    
    @end

    在info.plist添加字段Privacy - Location Usage Description可以设置获取定位权限时候提示给用户的文字

  • 相关阅读:
    翻译《Writing Idiomatic Python》(三):变量、字符串、列表
    Jetson TK1刷机+配置Mini PCI-e无线网卡
    翻译《Writing Idiomatic Python》(二):函数、异常
    翻译《Writing Idiomatic Python》(一):if语句、for循环
    用Python和摄像头制作简单的延时摄影
    安卓加固之so文件加固
    Windbg+VirtualBox双机调试环境配置(XP/Win7/Win10)
    Sizeof Class
    32位和64位系统内核函数调用从ZwProtectVirtualMemory到NtProtectVirtualMemory
    JNI注册调用完整过程-安卓4.4
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/3874371.html
Copyright © 2011-2022 走看看