IOS學習筆記17——Core Location

來源:互聯網
上載者:User

IOS支援三種檢測當前位置的方式:手機基站、Wi-Fi、和GPS,其中GPS是經度最高的,同時也是最耗費手機電量的。一般情況下在室內是無法通過GPS擷取位置資訊的,通過Wi-Fi擷取位置的原理是通過網路供應商的IP地址資訊來擷取位置,經度不是很高,最後是通過手機基站擷取位置,手機開機後會串連附近的基站塔擷取訊號,通過基站可以得到手機所在的位置資訊,基站越密集,所擷取的位置資訊經度就越高。


IOS SDK提供的Core Location能比較好的提供擷取位置資訊的功能,擷取位置資訊涉及如下幾個類,CLLocationManager(位置管理器), CLLocation, CLLocationManagerdelegate(協議、提供委託方法),CLLocationCoodinate2D(儲存座標位置)

另外CLLocationManager還有幾個屬性;

desiredAccuracy:位置的精度屬性

取值有如下幾種:

kCLLocationAccuracyBest

精確度最佳

kCLLocationAccuracynearestTenMeters

精確度10m以內

kCLLocationAccuracyHundredMeters

精確度100m以內

kCLLocationAccuracyKilometer

精確度1000m以內

kCLLocationAccuracyThreeKilometers

精確度3000m以內


distanceFilter:橫向移動多少距離後更新位置資訊

delegate:響應CLLocationManagerdelegate的對象


下面來構建一個擷取位置的例子:

首先建立一個Single View Application工程,然後引入CoreLocation.framework,並在ViewController.h中修改如下:

#import <UIKit/UIKit.h>#import <CoreLocation/CoreLocation.h>@interface ViewController : UIViewController<CLLocationManagerDelegate>{    CLLocationManager *locManager;}@property (retain, nonatomic) IBOutletUILabel *lonLabel;@property (retain, nonatomic) IBOutletUILabel *latLabel;@property (retain, nonatomic) CLLocationManager *locManager;@end

.m檔案的實現如下,具體解釋在代碼注釋中說明

#import "ViewController.h"@interfaceViewController ()@end@implementation ViewController@synthesize lonLabel;@synthesize latLabel;@synthesize locManager;- (void)viewDidLoad{    [superviewDidLoad];        //初始化位置管理器    locManager = [[CLLocationManager alloc]init];    //設定代理    locManager.delegate = self;    //設定位置經度    locManager.desiredAccuracy = kCLLocationAccuracyBest;    //設定每隔100米更新位置    locManager.distanceFilter = 100;    //開始定位服務    [locManagerstartUpdatingLocation];}- (void)viewDidUnload{    [selfsetLonLabel:nil];    [selfsetLatLabel:nil];    [superviewDidUnload];    // Release any retained subviews of the main view.}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);}- (void)dealloc {    //停止定位服務    [locManagerstopUpdatingLocation];    [lonLabelrelease];    [latLabelrelease];    [superdealloc];}//協議中的方法,作用是每當位置發生更新時會調用的委託方法-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{    //結構體,儲存位置座標    CLLocationCoordinate2D loc = [newLocation coordinate];    float longitude = loc.longitude;    float latitude = loc.latitude;    self.lonLabel.text = [NSStringstringWithFormat:@"%f",longitude];    self.latLabel.text = [NSStringstringWithFormat:@"%f",latitude];    }//當位置擷取或更新失敗會調用的方法-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{    NSString *errorMsg = nil;    if ([error code] == kCLErrorDenied) {        errorMsg = @"訪問被拒絕";    }    if ([error code] == kCLErrorLocationUnknown) {        errorMsg = @"擷取位置資訊失敗";    }        UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"Location"                                                    message:errorMsg delegate:self cancelButtonTitle:@"Ok"otherButtonTitles:nil, nil];    [alertView show];    [alertView release];}@end

最後編譯並運行結果如下(在模擬器上得到的經緯度):

加入我們的QQ群或公眾帳號請查看:Ryan's
zone公眾帳號及QQ群


歡迎關注我的新浪微博和我交流:@唐韌_Ryan

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.