一、定位
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];
}
//--------------------------------------------------------------------------------------------

定位CoreLocation的更多相关文章

  1. iOS开发——高级篇——地理定位 CoreLocation

    一.CoreLocation 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用 ...

  2. 定位 - CoreLocation - 区域报警

    #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...

  3. 定位 - CoreLocation - 指南针

    #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...

  4. 定位 - CoreLocation - 打印位置信息

    1. 导入框架 <CoreLocation.framework>, 引入头文件 import <CoreLocation/CoreLocation.h>; 2. 创建管理者对象 ...

  5. 地图定位CoreLocation框架,地理位置编码与反编码

    在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 ...

  6. iOS学习笔记19-地图(一)定位CoreLocation

    一.定位介绍 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.要实现 ...

  7. iOS定位--CoreLocation框架

    CoreLocation框架的使用 // 首先导入头文件 #import <CoreLocation/CoreLocation.h> CoreLocation框架中所有数据类型的前缀都是C ...

  8. iOS定位--CoreLocation

    一:导入框架 #import <CoreLocation/CoreLocation.h> 二:设置代理及属性 <CLLocationManagerDelegate> @prop ...

  9. 定位 - CoreLocation - INTULocationManager

    https://github.com/intuit/LocationManager #import "ViewController.h" #import "INTULoc ...

随机推荐

  1. POJ 1155-TELE(树形背包)

    题意:电视台发送信号给很多用户,每个用户(叶子节点)有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号. 分析:问题与以i为根节点的子树所包含的叶子数 #incl ...

  2. jquery 日期控件

    控件官网: http://www.interidea.org/demo/icalendar.php#demohtml绑定控件 $("#startdate").icalendar({ ...

  3. OpenStack Swift client开发

    如果你搭建好了Swift环境 ,你应该可以通过Swift 命令 来尝试去测试上传下载等功能,这是因为在安装Swift的时候,通常会安装一个python-swiftclient客户端,这个一个pytho ...

  4. Unix System Overview

    一.Unix 体系结构 由上图可以看出,内核居于最里层,Shell,Libary routines,以及Application通过系统调用(system calls)访问内核提供的功能.注意系统调用与 ...

  5. php 仿百度文库

    http://www.haosblog.com/?mod=article_read&id=386

  6. 【noip2012】疫情控制

    题意: 给出一颗n个节点有边权的树 和m个军队所在的位置 军队从某节点移动到相邻节点要花费边长度的时间 求最少要多少时间使得根节点(编号为1)到每个叶子的路径上最少有一支军队(根节点不能有军队) 题解 ...

  7. Linux 命令、Shell 杂货铺

    我看过一篇博客,是有关随手记录一些常用的命令的.感觉对自己比较有价值,不过其他人读起来就比较费劲了,毕竟没有什么主线.各取所需吧各位~ 1.CentOS 查看和修改系统时间和时区 date #查看系统 ...

  8. IntelliJ远程调试教程

    概述 对于分布式系统的调试不知道大家有什么好的方法.对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时.今天咱们来了解了解Java远程调试这个牛逼的 ...

  9. HDU4862-Jump(最大流量最大费用流)

    题意:有n*m的格子,每一个格子包含一个数字,0-9.你初始的能量为0,你可以玩k次,每一个你可以选择你现在的格子的正下方或者正右方的任意一个格子跳,但必须是之前没有跳过的格子.每玩一次你都可以跳任意 ...

  10. AVR ATMEGA8 串口USART

    avr串口配置很简单,配置就几个寄存器就可以进收发: 但有几点要搞明白的是: 1.串口一但被配置成功IO功能自动被占用,这点与LPC或STM8/32不同(需要寄存配置): 2.没有专门的串口开起或闭关 ...