Core Location Framework详解(二)如何根据坐标获取其位置的详细信息

本文相关: CLLocation CLGeocoder

上一篇说到如何获取相关坐标值,这篇主要来说说根据坐标值来获取其位置的详细信息。

之前我们讲到在当成功授权后,便可以通过- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations这个Delegate来获取位置数据

#pragma mark - CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *newLocation = [locations lastObject];
    
    NSLog(@"newLocation lat:%f", newLocation.coordinate.latitude);
    NSLog(@"newLocation lng:%f", newLocation.coordinate.longitude);
}

这里要注意的是,(NSArray *)locations 是数组参数传过来,官方的解释这个参数是

An array of CLLocation
objects containing the location data. This array always contains at least one object representing the current location. If updates were deferred or if multiple locations arrived before they could be delivered, the array may contain additional entries. The objects in the array are organized in the order in which they occurred. Therefore, the most recent location update is at the end of the array.

这里的意思是locations主要至少包含了一组当前的位置数据,如果更新有延迟或者几个数据同时传过来的话,那locations便会包含几条位置信息,但最后更新的(最新的)位置信息是放在最后那个元素


CLLocation

所以我们只需要读取locations最后一个元素便能获得一个CLLocation对象数据。

 CLLocation *newLocation = [locations lastObject];

CLLocation不仅包含了地理位置信息,还包含了方向,速度等信息,当然这些信息都是由硬件提供,然后通过CLLocation获取到这些信息。


基本属性

其中CLLocation有以下一些属性

  • coordinate (坐标组)
  • altitude (垂直高度——基于海平面,单位为米)
  • floor (iOS 8.0之后的属性)
  • horizontalAccuracy (该属性表明定位信息的水平精确度。将返回的坐标作为圆心,并将水平精确度视为半径。真正的设备位置落在此圆内的某处。此圆越小,位置就越精确;此圆越大,则位置越不精确。如果精确度为负值,则表明测量精确度失败。)
  • verticalAccuracy (该属性表明定位信息的垂直精确度。也就是说,iOS设备的实际高度在该定位信息的高度加或减该属性值的范围内。)
  • timestamp (这个时间是GMT 格林威治时间,北京时间是 GMT +8,所以加上8小时后才是北京时间)
  • description (信息描述)

计算两点间的距离

如果要计算两点之间的距离的话,可以使用- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 这个函数

double distance = [newLocation distanceFromLocation:secondLocation];

计算当前行驶速度

CLLocation其中一个属性值speed,是用来计算出当前行驶速度,单位是 米/秒
如果需要换算出时速公里的话,则可以通过计算获得

//乘以3600秒为1小时,然后除以1000为1公里
double kmPreHour = location.speed * 3600 / 1000;

获取当前方向

该属性表示当前设备前进的方向。该值为0°表示向北,90°表示向东,180°表示向南,270°表示向西。

double currentCourse = location.course;

CLGeocoder

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,850评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 出自http://my.oschina.net/are1OfBlog/blog/420034 摘要 现在很多社交、...
    JJO阅读 9,592评论 4 19
  • 我们为什么要写作?或许是为了展现写作天赋,或许是为了宣泄无法诉诸于口的情感,或许是为了解决最实在的养家糊口难题,也...
    茉小凉阅读 3,418评论 0 2
  • 甲申鉴古西乡行,席间偶遇刘老兄。刘兄熟稔乡土志,陕南人物罗胸中。酒热趣同谈锋盛,席间席下话难停。尤忆初逢说积铁(当...
    b00a2860b713阅读 2,372评论 0 0