LBS(定位)的使用

1、LBS(定位)的使用 git

一、使用框架Core Location 框架

 

二、CLLocationManager函數

(1)CoreLocation中使用CLLocationManager對象來作用戶定位atom

(2)CLLocationManager的經常使用操做spa

   <1>開始用戶定位代理

  - (void)startUpdatingLocation;rest

 

  <2>中止用戶定位對象

  - (void) stopUpdatingLocation;blog

 

  <3>當調用了startUpdatingLocation方法後,就開始不斷地定位用戶的位置,中途會頻繁地調用代理的下面方法ip

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

  locations參數裏面裝着CLLocation對象

 

  <4> 判斷當前定位是否可用,最好在使用前判斷

  +locationServicesEnabled

 

(3)定位的精確度

   <1>@property(assign, nonatomic) CLLocationDistance distanceFilter;

  每隔多少米定位一次

 

  <2>@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

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

 

 

三、CLLocation

 

(1)CLLocation對象用來表示某個位置的地理信息,好比經緯度、海拔等等

 

(2)經緯度

  @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

 

(3)海拔

  @property(readonly, nonatomic) CLLocationDistance altitude;

 

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

  @property(readonly, nonatomic) CLLocationDirection course;

 

(5)行走速度(單位是m/s)

  @property(readonly, nonatomic) CLLocationSpeed speed;

 

(6)計算兩個位置間的距離

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

 

 

 

四、CLLocationCoordinate2D

 

(1)CLLocationCoordinate2D是一個用來表示經緯度的結構體

 

(2)定義以下:

   typedef struct {

          CLLocationDegrees latitude; // 緯度

          CLLocationDegrees longitude; // 經度

  } CLLocationCoordinate2D;

 

(3)通常用CLLocationCoordinate2DMake函數來建立CLLocationCoordinate2D

 

 

五、關於用戶隱私

 

(1)從iOS 6開始,蘋果在保護用戶隱私方面作了很大的增強,不少操做都必須通過用戶批准受權:

    <1>得到用戶的位置  

  <2>訪問用戶的通信錄

  <3>日曆

  <4>相機

  <5>相冊

  <6>等等

 

(2)如何設置用戶隱私

    <1>開發者能夠在Info.plist中設置NSLocationUsageDescription說明定位的目的(Privacy - Location Usage Description)

    <2>  老是使用用戶位置:NSLocationAlwaysUsageDescription

     使用應用時定位:NSLocationWhenInUseDescription  

  

 

  <3> 不設置該字段,定位不能使用(至少設置其中之一,兩個都設置,NSLocationAlwaysUsageDescription生效)

 

 

六、示例代碼

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

@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic, strong) CLLocationManager *manager;
@end
@implementation ViewController

- (CLLocationManager *)manager
{
    if (!_manager) {
        
    //1.建立一個定位管理器
        _manager =  [[CLLocationManager alloc]init];
    }
   
    return _manager;
}

- (void)viewDidLoad {
    [super viewDidLoad];
   
    
    //2.獲取用戶的受權
    [self.manager requestAlwaysAuthorization];
    
    //3.開始定位
    [self.manager startUpdatingLocation];
    
    //4.設置代理
    self.manager.delegate = self;
    
    //設置屬性
    /*
     //導航專用的精確度
     extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
     extern const CLLocationAccuracy kCLLocationAccuracyBest;
     extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
     extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
     extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
     extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
    */
    //定位精確度
    self.manager.desiredAccuracy =  kCLLocationAccuracyBestForNavigation;
    
    
    
    
    //使用場景
    //求距離
    
    CLLocation *loc1 = [[CLLocation alloc]initWithLatitude:40 longitude:116];
    
    CLLocation *loc2 = [[CLLocation alloc]initWithLatitude:41 longitude:116];
    
    CLLocationDistance dis =  [loc1 distanceFromLocation:loc2];
    NSLog(@"%f",dis);
    
}

#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    
    //1.獲取用戶的位置
    CLLocation *location = [locations firstObject];
    
    CLLocationCoordinate2D coordinate =  location.coordinate;
    
    NSLog(@"%f ---- %f",coordinate.latitude,coordinate.longitude);
    
    NSLog(@"locations");
}


@end
相關文章
相關標籤/搜索