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