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


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

(1)Map Kit :用於地圖展示

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

兩個熱門專業術語

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

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


 

CoreLocation框架的使用

1. 使用前提:

  1》導入框架:

    

  

  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];

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM