原文链接:biggergao.github.io/CLLocation

我是前言

最近做了一下CLLocation相关的东西,较全面的写了点相关问题与解决办法,文章的demo可以在这里下载(有点RAC的知识)。
如果是模拟器,运行时请选择Location GPX文件
祝学习愉快。

副本主要任务

  • 定位设备经纬度与所在城市

预备知识-CLLocation对象(可跳过)

CLLocation对象存储着CLLocationManager对象生成的位置数据,先介绍一下它的属性大概了解CLLocation是什么东西

用于定位的属性 含义
coordinate 地理位置(经纬度)
altitude 海拔
floor 建筑内逻辑楼层
timestamp 定位时间戳
horizontalAccuracy 水平技能范围,单位米(见注1)
verticalAccuracy 海拔误差,单位米

注1:我们在地图上的点由经度和纬度确定,horizontalAccuracy表示该圆的半径是多大(单位为米),负值表示该点无效(经常用在if语句中判断点是否可用)

用于速度和方向的属性 含义
speed 瞬时速度
course 设备移动方向

实战

1.模拟器参数设置(可跳过)

1.1添加GPX文件设置

修改latitude(经度)和longitude(纬度)的值,可以使用图上的值lat=”29.568863”和lon=”106.460922”,美丽山城重庆。

最后调试选择对应的GPX文件即可

1.2直接修改模拟器的值

修改参数即可

2.获取经纬度

2.1 iOS8前的BUG

我们需要在info.plist文件里添加两个字段给APP定位权限,不然在iOS8后是无法启动定位的。他们分别是

属性名 含义
NSLocationWhenInUseUsageDescription 使用期间
NSLocationAlwaysUsageDescription 始终开启

添加如下:

上个效果图好理解点:

2.2核心代码讲解

- (void)findCurrentLocation {self.isFirstUpdate = YES;// 1if (! [CLLocationManager locationServicesEnabled]) {[TSMessage showNotificationWithTitle:@"未开启定位服务"subtitle:@"请开启定位服务定位您所在城市."type:TSMessageNotificationTypeError];}// 2else if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {[self.locationManager requestWhenInUseAuthorization];[self.locationManager startUpdatingLocation];}// 3else {[self.locationManager requestAlwaysAuthorization];[self.locationManager startUpdatingLocation];}
}- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {if (self.isFirstUpdate) {// 4self.isFirstUpdate = NO;return;}// 5CLLocation *newLocation = [locations lastObject];self.currentLocation = newLocation;CLGeocoder *geocoder = [[CLGeocoder alloc] init];// 反向地理编译出地址信息[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {if (! error) {if ([placemarks count] > 0) {CLPlacemark *placemark = [placemarks firstObject];// 获取城市NSString *city = placemark.locality;if (! city) {// 6city = placemark.administrativeArea;}self.currentCity = city;} else if ([placemarks count] == 0) {[TSMessage showNotificationWithTitle:@"GPS故障"subtitle:@"定位城市失败"type:TSMessageNotificationTypeError];}} else {[TSMessage showNotificationWithTitle:@"网络错误"subtitle:@"请检查您的网络"type:TSMessageNotificationTypeError];}}];[self.locationManager stopUpdatingLocation];
}

1、未开启定位服务

2、使用时定位

3、始终定位

4、第一次数据可以是久值,需舍弃

5、locations中有两个元素,第一个为旧值,第二个为新值

6、四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)

最后通关副本:

参考博客:

http://blog.csdn.net/ndscoahz/article/details/42418729

http://blog.it985.com/13173.html

Done

作者 @biggergao

2016年05月15日

iOS定位-核心定位框架CLLocation相关推荐

  1. IOS定位核心与地图

    本文转载至:http://www.cnblogs.com/xinye/archive/2013/06/13/3134746.html IOS定位核心与地图                 Core L ...

  2. iOS关于地图定位基础(二)

    在前一篇文章 iOS关于地图定位基础(一) 中我们主要总结了 iOS 里面利用原生 CoreLocation 框架实现基本定位功能和一些注意点,侧重点主要是iOS8+之后的定位授权与授权状态的使用.接 ...

  3. Ios开发之定位CLLocationManager

    Ios中的定位功能是通过 Core Location框架实现的.它和地图开发框架是相互独立的.在Core Location中主要实现了定位和地理编码的功能! 下面我们就来介绍一下它的属性,方法和代理方 ...

  4. ios 高德获取定位_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API

    iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...

  5. iOS 自带定位服务

    原文地址:http://cnbin.github.io/blog/2015/07/04/ios-zi-dai-ding-wei-fu-wu/ 定位服务 iOS 7 提供了4种不同的途径进行定位,具体如 ...

  6. iOS关于地图定位基础(一)

    若看完这篇的朋友,可以查看我的下一篇iOS关于地图定位基础(二)    随着更多的LBS(Location Based Service)业务被集成到手机应用  同时鉴于在iOS中地图的学习是看了又忘, ...

  7. ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API

    简介 高德 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能. iOS定位SDK提供了单次定位.连续定位.逆地理信息.地理围栏等功能. ...

  8. ios 高德获取定位_更新日志-iOS 定位SDK | 高德地图API

    高德地图iOS 定位 SDK V2.6.7            2020-08-28 1.适配iOS14定位权限:新增"模糊定位"权限下的兼容策略: 2.修复bug,提升性能和稳 ...

  9. ios 高德获取定位_概述-iOS 定位SDK | 高德地图API

    简介 高德 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能. iOS定位SDK提供了单次定位.连续定位.逆地理信息.地理围栏等功能. ...

  10. XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件

    XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件 开发者可以在指定的路径中找到复制的数据库文件,具体的操作步骤如下: (1)单击Mac电脑中Finder菜单中的"前 ...

最新文章

  1. 【Unity 3D】学习笔记三十六:物理引擎——刚体
  2. yarn的组成部分_图解YARN工作原理
  3. 从零开始学OpenDaylight(碳版本)之三:Hello示例
  4. 分布式服务管理框架-Zookeeper节点ACL
  5. 中国基因工程行业市场供需与战略研究报告
  6. Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串
  7. 什么是HTML5的媒体查询功能
  8. 计算机公式mode,强大的 Org mode(3): 表格的基本操作及公式、绘图 · ZMonster's Blog...
  9. 引入YouTube视频自动控制开始和暂停
  10. java 图文混排_图文混排的几种实现方案
  11. 基于双目视觉的非标机械臂的空间定位流程(未完待续)
  12. canvas实现简单的画图功能
  13. 如何用Matlab在极坐标系下绘图并调整极坐标初始角位置
  14. 无限宝电脑连接不上服务器,无限宝客户端登录过程问题
  15. android sqlite 分词,SQLite 之FTS5全文检索
  16. mysql 外键报错_MySQL添加外键、删除外键方式,MySQL删除外键报错快速解决方案...
  17. Answer Set Programming 回答集编程
  18. java与seo_java实现seo优化 提高运行效率
  19. 文献管理软件Mendeley最新使用指南看这里!
  20. android 区域 推流,Android——直播推流SDK

热门文章

  1. 安装与卸载应用程序 (Package Installer)
  2. 计算机考试67,注册电气工程师基础考试计算机基础知识试题答案(67)
  3. 漂浮广告代码 php,JS带关闭按钮的网页漂浮广告代码
  4. 初中计算机vb教程视频教程,关于中学信息技术vb的教学
  5. vb连接mysql教程视频_VB连接MYSQL数据的方法
  6. 3D场景编辑导出-LayaAir引擎Unity插件使用详解
  7. 【MySQL基础 安装】CentOS 7 Yum网络部署 最新官方MySQL5 2020_2_1
  8. python基础:基础语法
  9. OCR文本检测模型—CTPN
  10. 网络安全等级保护2.0标准解析