IOS地圖定位——IOS8/IOS9新特性(未完待續,歡迎給出建議、錯誤隨時更新)

在iOS開發中,使用定位,必須基於2個框架進行開發git

(1)Map Kit :用於地圖展現框架

(2)Core Location :用於地理定位iphone

兩個熱門專業術語ui

(1)LBS :Location Based Service(基於定位的服務)百度,(高德是定位與導行比較出色)編碼

(2)SoLoMo :Social Local Mobile(索羅門)基於位置進行社交atom


 

CoreLocation框架的使用spa

1. 使用前提:代理

  1》導入框架:code

    

  

  2》導入主頭文件對象

    #import <CoreLocation/CoreLocation.h>

2. CoreLocation框架使用須知

  CoreLocation框架中全部數據類型的前綴都是CL

  CoreLocation中使用CLLocationManager對象來作用戶定位


 【初學】

使用方法:

——實現一次定位

// 使用前注意:使用模擬器定位可能會出現bug(沒法定位位置),

// 解決方案:切換模擬器,(好比模擬器iphone6切換成iphone7)

1. 建立位置管理器

// @property (nonatomic, strong) CLLocationManager *locationManager

self.locationManager = [[CLLocationManager alloc] init];

2. 設置代理--爲了獲取經緯度

self.locationManager.delegate = self;

 

3. 請求受權-iOS8之後必須實現

詳細——http://www.tuicool.com/articles/VN3632

// 在IOS8之後須要受權   —— 配置plist文件

/*
修改info.plist
新增Key: NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription ,這兩個Key的值將分別用於描述應用程序始終使用和使用期間使用定位的說明
這些說明將顯示在用戶設置中(彈窗受權時的說明)。
*/

// 用戶使用期間受權
[self.locationManager requestWhenInUseAutorization];

// 老是受權
[self.locationManager requestAlwaysAuthorization];

 

4. 開始請求定位

// [self.locationManager startUpdatingHeading];  這個是獲取定位方向

// 開始定位
[self.locationManager startUpdatingLocation];

 

5. 在代理方法中中止更新

// 用戶更新位置時候調用,
// 不停調用,因此會很耗電,因此使用一次定位後中止就能夠
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
    NSLog(@"%@", locations);
    
    // locations包含的是CLLocation對象
    //    CLLocationCoordinate2D 2D位置座標  也就是經緯度
    //    latitude      緯度
    //    longitude     經度
    CLLocation *location = [locations lastObject];
    
    NSLog(@"緯度 %f", location.coordinate.latitude);
    NSLog(@"經度 %f", location.coordinate.longitude);
    
    // 中止更新位置——實現一次定位
    [self.locationManager stopUpdatingLocation];
}

 

 ——實現持續定位,比較兩點間距離

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1. 建立位置管理器
    self.locationManager = [[CLLocationManager alloc] init];
    //2. 設置代理
    self.locationManager.delegate = self;
    //3. 請求用戶受權--iOS8之後才須要受權 --配置plist文件
    // 用戶使用期間受權
    [self.locationManager requestWhenInUseAuthorization];
// —————————————上邊都同樣————下邊實現持續定位,設置經度,並比較兩點間直線距離——————————————————— // 老是受權 [self.locationManager requestAlwaysAuthorization]; //4. 距離篩選器 好比: 當前設置10米 實現持續定位 當位置發生多大的改變後調用代理方法 self.locationManager.distanceFilter = 50; //5. 定位精準度 50米 周圍50米的範圍都會認爲是同一地點 2000米 周圍2000米的範圍都會認爲是同一地點 //desired 指望 //Accuracy 精準度 //kCLLocationAccuracyBest 默認 self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; //6. 開始定位 [self.locationManager startUpdatingLocation]; //7. 比較兩個位置之間的距離 [self compareDistance]; } - (void)compareDistance { //北京到阿拉善左旗位置 CLLocation *location1 = [[CLLocation alloc] initWithLatitude:40.06 longitude:116.39]; CLLocation *location2 = [[CLLocation alloc ] initWithLatitude:38.85 longitude:105.68]; // 比較兩點之間的直線距離 CGFloat distance = [location1 distanceFromLocation:location2]; NSLog(@"distance: %f",distance / 1000); }

IOS9新特性

 

 

 

 

 

 

 

 

 

iOS9新特性-只開啓前臺定位時, 臨時開啓後臺定位功能

在以前的版本若是隻開啓了用戶使用期間定位, 就沒法後臺定位. iOS9更加靈活的提供了屬性, 能夠再須要的時候臨時開啓後臺定位.

首先設置allowsBackgroundLocationUpdates屬性爲YES

而後須要增長plist鍵值對: Required background modes : App registers for location updates

   

 

應用進入後臺

 

 

 

 

 

//1. 建立位置管理器
    self.locationManager = [CLLocationManager new];
    
    //2. 設置代理
    self.locationManager.delegate = self;
    
    //3. 請求用戶受權--iOS8之後才須要受權 --配置plist文件
    
    //1. 若是要適配iOS7, 須要增長判斷
    //2. 注意方法和鍵值對的匹配
    //3. requestWhenInUseAuthorization 和 requestAlwaysAuthorization 兩者實現其一便可, 一般實現requestWhenInUseAuthorization用戶使用期間
    
    // 版本判斷 系統版本大於8時, 才須要請求受權
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
        
        // 用戶使用期間受權
        [self.locationManager requestWhenInUseAuthorization];
        
        // MARK:  iOS9新增
        // 臨時開打後臺定位功能  還要配置pllist
        self.locationManager.allowsBackgroundLocationUpdates = YES;
        
        // 老是受權 -- 顯示其餘程序時--程序在後臺時能夠定位
//        [self.locationManager requestAlwaysAuthorization];
        
    }
    
    //4. 開始定位
    [self.locationManager startUpdatingLocation];

 

——  後續預告  反地理編碼(根據經緯度查詢位置)

相關文章
相關標籤/搜索