天天看點

ios Xcode 8.0 CoreLocation定位服務CoreLocation定位服務1.CLLocationManager2.CLLocation3.CLLocationCoordinate2D

CoreLocation定位服務

1.CLLocationManager

CLLocationManager的常用操作和屬性

開始使用者定位- (void)startUpdatingLocation;

停止使用者定位- (void) stopUpdatingLocation;

說明:當調用了startUpdatingLocation方法後,就開始不斷地定位使用者的位置,中途會頻繁地調用代理的下面方法

  - (void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations;

每隔多少米定位一次

  @property(assign, nonatomic) CLLocationDistance distanceFilter;

定位精确度(越精确就越耗電)

  @property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

2.CLLocation

CLLocation用來表示某個位置的地理資訊,比如經緯度、海拔等等

(1)經緯度

  @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

(2)海拔

  @property(readonly, nonatomic) CLLocationDistance altitude;

(3)路線,航向(取值範圍是0.0° ~ 359.9°,0.0°代表真北方向)

  @property(readonly, nonatomic) CLLocationDirection course;

(4)行走速度(機關是m/s)

   @property(readonly, nonatomic) CLLocationSpeed speed;

(5)計算2個位置之間的距離

  - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location方法

3.CLLocationCoordinate2D

CLLocationCoordinate2D是一個用來表示經緯度的結構體,定義如下

typedef struct {

CLLocationDegrees latitude; // 緯度

CLLocationDegrees longitude; // 經度
           

} CLLocationCoordinate2D;

一般用CLLocationCoordinate2DMake函數來建立CLLocationCoordinate2D

//

// YYViewController.m

// 18-定位服務

#import "YYViewController.h"
 #import <CoreLocation/CoreLocation.h>

 //需要遵守CLLocationManagerDelegate協定
 @interface YYViewController ()<CLLocationManagerDelegate>
 @property(nonatomic,strong)CLLocationManager *locMgr;
 @end

 @implementation YYViewController
 #pragma mark-懶加載
 -(CLLocationManager *)locMgr
 {
    if (_locMgr==nil) {
 //1.建立位置管理器(定位使用者的位置)
      self.locMgr=[[CLLocationManager alloc]init];
 //2.設定代理
      self.locMgr.delegate=self;
 }
         return _locMgr;
     }
 - (void)viewDidLoad
 {
         [super viewDidLoad];

 //判斷使用者定位服務是否開啟
     if ([CLLocationManager locationServicesEnabled]) {
//開始定位使用者的位置
     [self.locMgr startUpdatingLocation];
//每隔多少米定位一次(這裡的設定為任何的移動)
                 self.locMgr.distanceFilter=kCLDistanceFilterNone;
//設定定位的精準度,一般精準度越高,越耗電(這裡設定為精準度最高的,适用于導航應用)
                 self.locMgr.desiredAccuracy=kCLLocationAccuracyBestForNavigation;
 }else{//不能定位使用者的位置
       //1.提醒使用者檢查目前的網絡狀況
       //2.提醒使用者打開定位開關
 }

//測試方法,計算兩個位置之間的距離
         [self countDistance];
 }

 #pragma mark-CLLocationManagerDelegate
 /**
  *  當定位到使用者的位置時,就會調用(調用的頻率比較頻繁)
  */
 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
 {
//locations數組裡邊存放的是CLLocation對象,一個CLLocation對象就代表着一個位置
        CLLocation *loc = [locations firstObject];

//次元:loc.coordinate.latitude
//經度:loc.coordinate.longitude
         NSLog(@"緯度=%f,經度=%f",loc.coordinate.latitude,loc.coordinate.longitude);
         NSLog(@"%d",locations.count);

//停止更新位置(如果定位服務不需要實時更新的話,那麼應該停止位置的更新)
//    [self.locMgr stopUpdatingLocation];

 }

 //計算兩個位置之間的距離
 -(void)countDistance
 {
 //根據經緯度建立兩個位置對象
 CLLocation *loc1=[[CLLocation alloc]initWithLatitude: longitude:];
 CLLocation *loc2=[[CLLocation alloc]initWithLatitude: longitude:];
 //計算兩個位置之間的距離
 CLLocationDistance distance=[loc1 distanceFromLocation:loc2];
 NSLog(@"(%@)和(%@)的距離=%fM",loc1,loc2,distance);
     }
 @end