iOS開發(fā)之定位

一、介紹

1、定位使用CoreLocation框架
2、主要功能
(1)基礎(chǔ)定位
(2)地理編碼反編碼
3、IOS8 IOS9之后的改變
(1)需要在info.plist里面添加定位服務(wù)的目的:
1??NSLocationAlwaysUsageDescription
2??NSLocationWhenInUseUsageDescription
??注意:如果忘記寫 就不能使用定位功能 沒(méi)有任何定位信息
(2)請(qǐng)求用戶授權(quán)
1??requestAlwaysAuthorization
2??requestWhenInUseAuthorization
??注意:如果和描述的目的不匹配 也不能使用定位功能

  • NSLocationAlwaysUsageDescription對(duì)應(yīng)requestAlwaysAuthorization
  • NSLocationWhenInUseUsageDescription對(duì)應(yīng)requestWhenInUseAuthorization

(3)IOS9 按HOME鍵進(jìn)入后臺(tái) 如果需要繼續(xù)定位 就要:
1> 在info.plist文件里面添加:
Required background modes -> App registers for location updates
如果沒(méi)有添加這對(duì)鍵值 卻使用后臺(tái)定位功能 會(huì)直接崩潰
2> allowsBackgroundLocationUpdates 屬性需要設(shè)置成YES

二岳守、使用

1、使用定位服務(wù)所需的相關(guān)類 和其他的數(shù)據(jù)類型
(1)CLLocationManager
定位的管理者 可以通過(guò)這個(gè)類創(chuàng)建定位服務(wù)的功能
(2)CLLocation
地理位置信息相關(guān)的一個(gè)類

  •    1??coordinate:經(jīng)緯度
    
          latitude:緯度
      longitude:經(jīng)度
  •     2??altitude:高度
    
  •    3??horizontalAccuracy:水平的精準(zhǔn)度 可以用它來(lái)監(jiān)測(cè)是否定位成功 如果是正數(shù)一定定位成功
    
  •     4??verticalAccuracy:垂直的精準(zhǔn)度
    
  •   ???speed :速度
    

(3)CLLocationCoordinate2D
坐標(biāo)的數(shù)據(jù)類型(結(jié)構(gòu)體)
(4)CLRegion
表示范圍的一個(gè)類
(5)CLGeocoder
地理編碼 反編碼的一個(gè)類
(6)CLPlacemark
表示地標(biāo)的一個(gè)類 用文字表示出來(lái)位置信息的類(里面同時(shí)包含了location)
(7)CLHeading
表示導(dǎo)航方向的一個(gè)類 航向
2碌冶、具體使用
(1)定位

  •   0??檢查用戶是否在設(shè)置中打開了定位服務(wù)
    
  •  1??初始化定位對(duì)象:
    
  • 2??info中添加描述使用定位的目的 并向用戶申請(qǐng)授權(quán)
    
  •  3??掛上代理 實(shí)現(xiàn)代理方法
    
  •   4??如果需要使用后臺(tái)定位服務(wù)的功能 需要在info.plist文件里面添加:
    

Required background modes -> App registers for location updates

  •   ???開始定位
    

(2)地理編碼 反編碼
地理編解碼 在編解碼的時(shí)候是一個(gè)耗時(shí)的操作 可以使用異步操作

  • 1湿痢、地理編碼:把地名轉(zhuǎn)換成位置信息 用處:把文字描述的位置轉(zhuǎn)換成地圖上的經(jīng)緯度
  • 2、反地理編碼:把位置信息轉(zhuǎn)換成文字 用處:可以通過(guò)點(diǎn)擊選擇地圖上的某一位置來(lái)獲得這一位置文字的描述

distanceFilter 多少米更新一次
desiredAccuracy 設(shè)置定位的精準(zhǔn)度

代碼示例

//
//  ViewController.m
//  定位
//
//  Created by scsys on 16/3/7.
//  Copyright ? 2016年 安靜SRR. All rights reserved.
//

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()<CLLocationManagerDelegate>
{

    CLLocationManager *locationManager;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //0种樱、 判斷用戶是否在設(shè)置里面打開了定位服務(wù)功能
    if ( ![CLLocationManager locationServicesEnabled]) {
        //1.跳出彈出框 提示用戶打開步驟
        //2.通過(guò)代碼調(diào)到設(shè)置頁(yè)面
#pragma mark ------1跳出彈出框 提示用戶打開步驟
        
//        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"溫馨提示" message:@"請(qǐng)?jiān)谠O(shè)置中打開定位服務(wù)功能" preferredStyle:UIAlertControllerStyleAlert];
//        UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"??" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//            
//        }];
//        [alert addAction:action1];
//        
//        [self presentViewController:alert animated:YES completion:nil];
#pragma mark ----------2通過(guò)代碼跳到設(shè)置頁(yè)面
        //openURL:用于跳轉(zhuǎn)APP 跳到IOS允許跳到的界面
        if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]) {
            //跳轉(zhuǎn)到設(shè)置界面
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        }
        
        return;
    }
    //1蒙袍、創(chuàng)建定位管理者的對(duì)象 一般都用屬性去創(chuàng)建
    locationManager = [[CLLocationManager alloc]init];
    //設(shè)置多少米去更新一次位置信息
    locationManager.distanceFilter = 100;
    //設(shè)置定位的精準(zhǔn)度
    locationManager.desiredAccuracy =
    kCLLocationAccuracyBest;
    //2.info中添加描述使用定位的目的 并向用戶申請(qǐng)授權(quán)
    [locationManager requestWhenInUseAuthorization];
    //3俊卤、掛上代理 并實(shí)現(xiàn)代理方法
    locationManager.delegate = self;
    //4.如果需要使用后臺(tái)定位服務(wù)的功能 需要在info.plist文件里面添加:Required background modes -> App registers for location updates
    locationManager.allowsBackgroundLocationUpdates = YES;
    //5.開始定位
    [locationManager startUpdatingLocation];

    
}
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    CLLocation *curloc = [locations firstObject];
    //坐標(biāo):經(jīng)緯度 結(jié)構(gòu)體
    /* latitude:緯度
       longitude:經(jīng)度
     */
  CLLocationCoordinate2D coordinte = curloc.coordinate;
    NSLog(@"經(jīng)度%f緯度%f",coordinte.longitude,coordinte.latitude);
   // CLLocationDistance 是double類型
    NSLog(@"高度是%f",curloc.altitude);
    //可以通過(guò)水平精準(zhǔn)度來(lái)判斷是否定位成功 如果是負(fù)數(shù)表示定位錯(cuò)誤 如果是正數(shù)表示定位成功
    NSLog(@"水平精準(zhǔn)度是%f",curloc.horizontalAccuracy);
    
     NSLog(@"垂直精準(zhǔn)度是%f",curloc.verticalAccuracy);
    /*
     course當(dāng)前設(shè)備前進(jìn)的方向
     0°表示向北
     90°表示向東
     180°表示向南
     270°表示向西
     */
     NSLog(@"航向是%f",curloc.course);
    NSLog(@"當(dāng)前行駛的速度速度是%f",curloc.speed);
     NSLog(@"樓層的高度是%ld層",curloc.floor.level);
    //當(dāng)前定位的日期NSData
    NSLog(@"當(dāng)前的時(shí)間是%@層",curloc.timestamp);
    //1、是否超速
    //2.行駛距離:總距離 = 每一次更新位置得到的距離累加
   // CLLocationDistance 距離
    //- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location得到兩次loction之間距離的方法
    //3.行駛時(shí)間:總時(shí)間 = 每一次更新得到的時(shí)間間隔的累加
    //可以得到當(dāng)前的時(shí)間戳
    //日期有一個(gè)方法 計(jì)算兩個(gè)日期之間的間隔
    //通過(guò)記錄上一次和更新的Location得到上一次時(shí)間
    //4.平均速度:總距離/總時(shí)間
    
    
    
}
- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error{
    
    NSLog(@"定位錯(cuò)誤");
    

}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

地理編解碼的代碼示例放下一章害幅,看著應(yīng)該會(huì)比較清晰消恍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市以现,隨后出現(xiàn)的幾起案子狠怨,更是在濱河造成了極大的恐慌,老刑警劉巖邑遏,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佣赖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡记盒,警方通過(guò)查閱死者的電腦和手機(jī)憎蛤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纪吮,“玉大人俩檬,你說(shuō)我怎么就攤上這事∧朊耍” “怎么了棚辽?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)冰肴。 經(jīng)常有香客問(wèn)我屈藐,道長(zhǎng),這世上最難降的妖魔是什么熙尉? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任联逻,我火速辦了婚禮,結(jié)果婚禮上检痰,老公的妹妹穿的比我還像新娘遣妥。我一直安慰自己,他們只是感情好攀细,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著爱态,像睡著了一般谭贪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锦担,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天俭识,我揣著相機(jī)與錄音,去河邊找鬼洞渔。 笑死套媚,一個(gè)胖子當(dāng)著我的面吹牛缚态,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堤瘤,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玫芦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了本辐?” 一聲冷哼從身側(cè)響起桥帆,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慎皱,沒(méi)想到半個(gè)月后老虫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茫多,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年祈匙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片天揖。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夺欲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宝剖,到底是詐尸還是另有隱情洁闰,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布万细,位于F島的核電站扑眉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赖钞。R本人自食惡果不足惜腰素,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雪营。 院中可真熱鬧弓千,春花似錦、人聲如沸献起。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谴餐。三九已至姻政,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岂嗓,已是汗流浹背汁展。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人食绿。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓侈咕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容