iOS開發之CoreLocation(GPS定位)

1、概述git

在iOS開發中,要想加入地圖和定位功能這2大功能,必須基於2個框架進行開發框架

(1)Map Kit :用於地圖展現函數

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

2個熱門專業術語:atom

LBS :Location Based Service代理

SoLoMo :Social Local Mobile(索羅門)code

2CoreLocation框架的使用對象

CoreLocation框架使用前提:ip

導入框架:ci

導入主頭文件:

#import <CoreLocation/CoreLocation.h>

CoreLocation框架使用須知:

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

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

3CLLocationManager

CLLocationManager的經常使用操做:

(1)開始用戶定位

- (void)startUpdatingLocation;

(2)中止用戶定位

- (void) stopUpdatingLocation;

 

當調用了startUpdatingLocation方法後,就開始不斷地定位用戶的位置,中途會頻繁地調用代理的下面方法:

- (void)locationManager:(CLLocationManager *)manager

didUpdateLocations:(NSArray *)locations;

locations參數裏面裝着CLLocation對象。

例如,取出位置對象:

CLLocation *loc = [locations firstObject];

打印經緯度:

NSLog(@"didUpdateLocations------%f %f", coordinate.latitude, coordinate.longitude);

使用前記得設置代理:

// 建立定位管理者

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

// 設置代理

self.locMgr.delegate = self;

4CLLocation

CLLocation用來表示某個位置的地理信息,好比經緯度、海拔等等。

@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

經緯度

 

@property(readonly, nonatomic) CLLocationDistance altitude;

海拔

 

@property(readonly, nonatomic) CLLocationDirection course;

路線,航向(取值範圍是0.0° ~ 359.9°,0.0°表明真北方向)

 

@property(readonly, nonatomic) CLLocationSpeed speed;

行走速度(單位是m/s)

 

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location計算2個位置之間的距離

例如:

計算2個經緯度之間的直線距離

CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:40 longitude:116];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:41 longitude:116];
CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
NSLog(@"距離爲%f", distance);

5CLLocationManager

@property(assign, nonatomic) CLLocationDistance distanceFilter;

每隔多少米定位一次

 

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

定位精確度(越精確就越耗電)

6CLLocationCoordinate2D

CLLocationCoordinate2D是一個用來表示經緯度的結構體,定義以下:

typedef struct {
        CLLocationDegrees latitude; // 緯度
        CLLocationDegrees longitude; // 經度
} CLLocationCoordinate2D;

通常用CLLocationCoordinate2DMake函數來建立CLLocationCoordinate2D。

7、用戶隱私的保護

開發者能夠在Info.plist中設置NSLocationUsageDescription說明定位的目的(Privacy - Location Usage Description)。

一旦用戶選擇了「Don’t Allow」,意味着你的應用之後就沒法使用定位功能。爲了嚴謹起見,最好在使用定位功能以前判斷當前應用的定位功能是否可用。

CLLocationManager有個類方法能夠判斷當前應用的定位功能是否可用:

+ (BOOL)locationServicesEnabled;

8CLGeocoder

使用CLGeocoder能夠完成「地理編碼」和「反地理編碼」:

地理編碼:根據給定的地名,得到具體的位置信息(好比經緯度、地址的全稱等)。

反地理編碼:根據給定的經緯度,得到具體的位置信息。

地理編碼方法:

- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;

反地理編碼方法:

- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

9CLGeocodeCompletionHandler

當地理\反地理編碼完成時,就會調用CLGeocodeCompletionHandler:

typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);

這個block傳遞2個參數:

error :當編碼出錯時(好比編碼不出具體的信息)有值

placemarks :裏面裝着CLPlacemark對象

10CLPlacemark

CLPlacemark的字面意思是地標,封裝詳細的地址位置信息。

@property (nonatomic, readonly) CLLocation *location;

地理位置

 

@property (nonatomic, readonly) CLRegion *region;

區域

 

@property (nonatomic, readonly) NSDictionary *addressDictionary;

詳細的地址信息

 

@property (nonatomic, readonly) NSString *name;

地址名稱

 

@property (nonatomic, readonly) NSString *locality;

城市

相關文章
相關標籤/搜索