Core Location Framework详解(二)如何根据

2015-10-07  本文已影响315人  LeoAu

本文相关: 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有以下一些属性


计算两点间的距离

如果要计算两点之间的距离的话,可以使用- (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

上一篇 下一篇

猜你喜欢

热点阅读