定位CoreLocation_weixin_30265171的博客-程序员秘密

一、定位
iOS三种定位方式: CoreLocation
按定位的准确性: GPS(Global Positioning System全球定位系统); 蜂窝式基站; wifi;

定位顺序:
1. 首选GPS:
    1) 前提: 室内肯定不会用GPS
2. wifi —> 最经济实惠的
3. 基站

GPS:
优点: 定位最准确;
缺点: 最费电; 最费流量;

功能/内容:
1. 单纯的定位 CoreLocation Framework
    1) 常用的类:
     CLLocationManager;  
     CLLocationManagerDelegate;
     CLLocation;

 2.定位的步骤:
    1) #import <CoreLocation/CoreLocation.h>
    2) 遵循协议CLLocationManagerDelegate
     3) 创建CLLocationManager对象
    4) 设置代理, 并实现协议的方法

3. 针对ios8+以上版本的定位设置:
1) 申请用户的权限(前台和后台):
a、[self.mgr requestAlwaysAuthorization];
b、——> NSLocationAlwaysUsageDescription加到plist文件中
2) 只申请前台的用户权限:
a、[self.mgr requestWhenInUseAuthorization];
b、—-> NSLocationWhenInUseUsageDescription加到plist文件中
 
二、地理编码
地理编码: 给定一个地名, 获得这个地名的位置信息(经纬度, 地址) CLGeocoder
常用类: CLGeocoder;  CLPlacemark;
[self.geoCoder geocodeAddressString:name completionHandler:^(NSArray *placemarks, NSError *error) {}];

反地理编码: 给定一个经纬度, 获取经纬度的位置
常用类: CLGeocoder;  CLPlacemark;
[self.geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {}];


结合地图来定位
//--------------------------------------------------------------------------------------------
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController () <CLLocationManagerDelegate>

@property (nonatomic, strong) CLLocationManager *mgr;

@end

@implementation ViewController
//懒加载初始化管理者对象
- (CLLocationManager *)mgr {
    if (!_mgr) {
        _mgr = [CLLocationManager new];
    }
    return _mgr;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    //设置代理
    self.mgr.delegate = self;
    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        //plist设置
        [self.mgr requestWhenInUseAuthorization];
    } else {
        //ios7
        NSLog(@"ios7");
        [self.mgr startUpdatingLocation];
    }
}
//用户是否授权代理方法
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) {
        NSLog(@"用户授权成功");
        //开始定位
        [self.mgr startUpdatingLocation];
    } else if (status == kCLAuthorizationStatusDenied) {
        NSLog(@"用户授权拒绝");
    }
}
//定位成功后的代理
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    NSLog(@"%s", __func__);//用来查询当前执行的方法
    //locations数组按照顺序存放; 最新的定位位置放在数组的最后面
    CLLocation *location = [locations lastObject];
    NSLog(@"定位后的位置: %f, %f, %f", location.coordinate.latitude, location.coordinate.longitude, location.speed);
    //停止定位
    [self.mgr stopUpdatingLocation];
}
//--------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/lignpeng/p/5458318.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30265171/article/details/99260977

智能推荐

人脸识别-Android/iOS配置和安装_util_c的博客-程序员秘密

opencv、dlib编译和安装,Android - CMake编译、iOS集成opencv、dlib

Elasticsearch 6 新特性与重要变更解读_esc_ai的博客-程序员秘密

2017年11月14日,Elastic Stack 6.0正式亮相,这篇文章总结Elasticsearch 6.0版本的一些新的特性和重要改变,根据官网文档,变更部分包括下列部分,下面一一说明。Aggregations changes Cat API changes Clients changes Cluster changes Document API changes Indice...

VMware vSphere 6 序列号大全_mooncarp的博客-程序员秘密

 经过测试ESXI6.5也可以使用。vSphere 6 HypervisorHY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8CKQ8 NV09R-2W007-08D38-CA956-33U28 JU400-6EK4L-080V9-QT8EP-2KAQ2vSphere 6 Hypervisor for Embedded...

java死鬼,Java中的泛型理解 - osc_84itep82的个人空间 - OSCHINA - 中文开源技术交流社区..._初小轨的博客-程序员秘密

泛型,又名"参数化类型",顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为...

特斯拉HW4.0揭开面纱,除了5MP摄像头/7nm芯片还有高分辨率雷达?_特斯拉 500万摄像头_高工智能汽车的博客-程序员秘密

本周,有消息称,三星已经与特斯拉签订一份价值约为4万亿至5万亿韩元(约合32亿至40亿美元)的合同,为后者智能驾驶驾驶传感器关键套件—500万像素摄像头,而目前的摄像头仅为120万像素。

Vcenter升级兼容性列表_vcenter兼容性列表哪里能看_海量数据 工程师的博客-程序员秘密

vCenter 5.1同样是不能直接升级到vCenter 6.5的ESXi5.1同样是不能直接升级到ESXi 6.5的vCenter6.5可以管理ESXi5.5 ~ESXi6.5U1vCenter6.0可以管理ESXi5.0~ESXi6.0.0vCenter5.5可以管理ESXi4.0U1~ESXi5.5U3因此建议的升级路径为:vSphere5.1–&gt; vSphere5.5–&gt; vSphere6.5如果客户想将目前的Vcenter5.1升级到7.3,就必须先..

随便推点

js 中的for循环 怎么每循环一次睡眠3秒_js睡眠3秒_慕容屠苏的博客-程序员秘密

js 中的for循环 怎么每循环一次睡眠3秒/** * 睡眠函数 * @param numberMillis -- 要睡眠的毫秒数 */function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) {

【读书笔记】《Java并发编程的艺术》Java内存模型——happens-before_孤丨焰的博客-程序员秘密

一、JMM的设计从JMM设计者的角度,在设计JMM时,需要考虑两个关键因素:程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模型来编写代码。编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化来提高性能。编译器和处理器希望实现一个弱内存模型。由于这两个因素互相矛盾,所以JSR-133专家组在设计JMM时的核心目标就是找到一个好的平衡点:一方面,要为程序员提供足够强的内存可见性保证;另一方面,对编译器和

Java面试题总结_weixin_34194551的博客-程序员秘密

1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继...

VMware 修复 vCenter 服务器中的严重 RCE 漏洞_奇安信代码卫士的博客-程序员秘密

聚焦源代码安全,网罗国内外最新资讯!作者:Pierluigi Paganini编译:奇安信代码卫士团队VMware 修复 vCenter Server 虚拟基础设施管理平台中的一个严重远...

org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat_小王曾是少年的博客-程序员秘密

启动Spring-cloud的eureka服务器时报了一个找不到Tomcat的错误:org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat原因是在eureka的pom文件里引入dependency时把guava排除掉了,去掉这部分内容即可...

svn安装与注意事项_小鲍侃java的博客-程序员秘密

1.下载软件包点击安装(一直下一步就可以了)注意 第二个选项要选中安装完成有两点要注意:1:上文提示要勾选的一定勾选上,否则ide中不能够使用svn2:不建议在D:,F:盘符下直接拉取!!!!!需要新建文件夹后再拉取...