CoreLocation定位技術,corelocation定位

來源:互聯網
上載者:User

CoreLocation定位技術,corelocation定位

CoreLocation架構可用於定位裝置當前經緯度,通過該架構,應用程式可通過附近的蜂窩基站,WIFI訊號或者GPS等資訊計算使用者位置。

     iOS定位支援的3種模式。     (1)GPS衛星定位     (2)基站定位     (3)WiFi     iOS開發人員使用CoreLocation.framework架構進行定位非常簡單,CoreLocation架構的常用API主要有如下幾個。     (1)CLLocationManger:定位管理器類。     (2)CLLocationManagerDelegate:該協議代表定位管理器的delegate協議。實現該協議的對象可負責處理CLLocationManager的定位事件。     (3)CLLocation:該對象代表位置。該對象包含了當前裝置的經度、緯度、高度、速度、路線等資訊,還包含了該定位資訊的水平精確度,垂直精確度以及時間戳記資訊。     (4)CLHeading:該對象代表裝置的移動方向。     (5)CLRegion:該對象代表一個地區。一般程式不會直接使用該類,而是使用它的兩個子類,即CLCircularRegion(圓形地區)和CLBeaconRegion(藍芽訊號區)。 1.擷取位置資訊     (1)建立CLLocationManager對象,該對象負責擷取定位相關資訊。並為該對象設定一些必要的屬性。     (2)為CLLocationManager指定delegate屬性,該屬性值必須是一個實現CLLocationManagerDelegate協議的對象。實現CLLocationManagerDelegate協議時可根據需要實現協議中特定的方法。     (3)調用CLLocationManager的startUpdatingLocation方法擷取定位資訊。定位結束時,可調用stopUpdatingLocation方法結束擷取定位資訊。 1、將CoreLocation.framework添加到項目中  2、 在iOS8中需要在info.plist中添加兩個欄位。  方向監測     擁有GPS硬體的裝置可以產生裝置的當前方向(course屬性)和速度資訊。iPhone裝置攜帶的定位管理器可以返回一個已經計算好的course 值,通過這個值我們可以獲得當前前進的方向,course值是0~360之間的浮點數,0°值表示正北方向,90°表示正東方向,180°值表示正南方 向,270°值表示正西方向,程式可以通過course值來檢測使用者位置的移動方向。除此之外,還可以通過磁力計來擷取裝置的真實方向。     使用CLLocationManager擷取裝置方向的步驟如下。     1.建立CLLocationManager對象,該對象負責擷取定位相關資訊,並為該對象設定一些必要的屬性。     2.為CLLocationManager指定delegate屬性,該屬性值必須是一個實現CLLocationManagerDelegate協議的對象。實現CLLocationManagerDelegate協議時可根據需要實現協議中特定的方法。     3.調用CLLocationManager的startUpdatingHeading方法擷取方向資訊。擷取方向結束時,可調用stopUpdatingHeading方法結束時擷取方向資訊。     當裝置的方向改變時,iOS系統就會自動激發CLLocationManager的delegate對象的locationManager:didUpdateHeading:方法,而程式可通過重寫該方法來擷取裝置方向。     iOS允許為檢測方向改變設定如下屬性。     1)CLLocationDegress headingFilter:設定只有當裝置方向的改變值超過該屬性值時才激發delegate的方法。     2)CLDeviceOrientation headingOrientation:設定裝置當前方向。     監聽方向時返回的是一個CLHeading對象,該對象包含以下屬性。     1)magnticHeading:該屬性返回裝置與磁北的相對方向。     2)trueHeading:該屬性返回裝置與真北的相對方向。     3)headingAccuracy:該屬性返回方向值的誤差範圍。     4)timestamp:該屬性返回方向值的產生時間。      地區監測     如果希望iOS裝置進入某個地區發出通知,那麼這種地區監測的功能也被稱為臨近警告。     使用者裝置不斷地臨近指定固定點,當與該固定點的距離小於指定範圍時,系統可以觸發相應的處理。使用者裝置離開指定固定點,當與該固定點的距離大於指定範圍時,系統也可以觸發相應的處理。     iOS的地區監測同樣可以使用CLLocationManager來實現,監聽裝置是否進入/離開某個地區的步驟如下:     1)建立CLLocationManager對象,該對象負責擷取定位相關資訊,並未該對象設定一些必要的屬性。對於地區監測而言,CLLocationManager對象需要設定monitoredRegions屬性,該屬性值用於設定該裝置監聽的多個地區。     2)為CLLocationManager指定delegate屬性,該屬性值必須是一個實現CLLocationManagerDelegate協議的對象。實現CLLocationManagerDelegate協議時可根據需要實現協議中特定的方法。     3)調用CLLocationManager的startMonitoringForRegion:方法進列區域監測。地區監測結束時,可調用stopMonitoringForRegion:方法結束地區監測。      CoreLocation具體詳細用法代碼
#import "ViewController.h"#import <CoreLocation/CoreLocation.h>@interface ViewController ()<CLLocationManagerDelegate>@property (nonatomic,strong) CLLocationManager *mange;@end@implementation ViewController-(CLLocationManager *)mange{    if (!_mange) {                //建立定位管理器        _mange = [[CLLocationManager alloc]init];                /*         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;一英裡                  */                //定位精確度,精確度越高越耗電        _mange.desiredAccuracy = kCLLocationAccuracyBest;        //定位的更新頻率,單位為米        _mange.distanceFilter = 5;                _mange.delegate = self;    }    return _mange;}- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.        //iOS8之後開啟定位需要執行這個方法或者,而且還要配置info.plist    CGFloat systemVersion = [UIDevice currentDevice].systemVersion.floatValue;        if (systemVersion>=8.0) {        [self.mange requestAlwaysAuthorization];    }        //2.判斷方法能否執行    //    if ([self.mange respondsToSelector:@selector(requestAlwaysAuthorization)]) {//        //        [self.mange requestAlwaysAuthorization];//    }        //3.判斷定位按鈕是否開啟        if (![CLLocationManager locationServicesEnabled]) {                NSLog(@"請開啟地圖導覽按鈕...親");    }    else    {        //擷取當前定位的狀態        CLAuthorizationStatus status = [CLLocationManager authorizationStatus];                //如果定位狀態未開啟        if(status == kCLAuthorizationStatusNotDetermined)        {            //前端定位            [self.mange requestAlwaysAuthorization];        }    }        //開啟定位        [self.mange startUpdatingLocation];}-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{        CLLocation *location = [locations lastObject];        // 經緯度    CLLocationCoordinate2D coordinate = location.coordinate;        NSLog(@"經度為:%f,緯度為:%f",coordinate.longitude,coordinate.latitude);        //當定位成功後,這個代理只執行一次,所有停止位置更新    [manager stopUpdatingLocation];}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.