ioS開發之CoreLocation(GPS定位)

來源:互聯網
上載者:User

標籤:

1、概述

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

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

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

2個熱門專業術語:

LBS :Location Based Service

SoLoMo :Social Local Mobile(索羅門)

2CoreLocation架構的使用

CoreLocation架構使用前提:

匯入架構:

匯入主標頭檔:

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

城市

ioS開發之CoreLocation(GPS定位)

聯繫我們

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