簡介:git
* 在移動互聯網時代,移動app能解決用戶的不少生活雜事,好比網絡
> 導航:去任意陌生的地方app
> 周邊:找餐館,找酒店,找銀行,找電影院框架
* 在上述應用中,都用到了地圖和定位功能,在iOS開發中,要想加入這2大功能,必須基於2個框架進行開發函數
> Map Kit : 用於地圖展現編碼
> Core Location : 用於地理定位atom
CoreLocation框架的使用:spa
* CoreLocation框架使用前提代理
> 導入框架code
> 導入主頭文件
#import <CoreLocation/CoreLocation.h>
* CoreLocation框架使用須知
> CoreLocation框架中全部數據類型的前綴都是CL
> CoreLocation中使用CLLocationManager對象來作用戶定位
1.CLLocationManager:
*CLLocationManger的經常使用操做
> 開始用戶定位 - (void)startUpdatingLocation;
// 檢測定位服務是否可用(多是程序第一次訪問用戶位置時,被用戶點擊了Don‘t Allow致使定位服務不可用) if ([CLLocationManager locationServicesEnabled]) { // 若是定位服務能用,開始定位 [self.manager startUpdatingLocation]; // 經過代理告訴用戶的位置 }else {// 不能定位用戶的位置 // 1.告訴用戶檢查網絡情況 // 2.提醒用戶打開定位開關 }
> 中止用戶定位
- (void) stopUpdatingLocation;
* 當調用了startUpdatingLocation方法後,就開始不斷地定位用戶的位置,中途會頻繁地調用代理的下面方法
// locations參數裏面裝着CLLocation對象
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
經常使用屬性:
// 每隔多少米定位一次 @property(assign, nonatomic) CLLocationDistance distanceFilter; //定位精確度(越精確就越耗電) @property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
2.CLLocation:用來表示某個位置的地理信息,好比經緯度,海拔等等
屬性:
// 座標(不是X,Y值,而是經緯度) @property(readonly, nonatomic) CLLocationCoordinate2D coordinate; // 海拔 @property(readonly, nonatomic) CLLocationDistance altitude; // 路線,航向(取值範圍是0.0° ~ 359.9°,0.0°表明真北方向) @property(readonly, nonatomic) CLLocationDirection course; // 行走速度(單位是m/s) @property(readonly, nonatomic) CLLocationSpeed speed;
方法:
// 計算2個位置之間的距離 - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
3.經緯度(CLLocationCoordinate2D)
* CLLocationCoordinate2D是一個用來表示經緯度的結構體,定義以下:
typedef struct { CLLocationDegrees latitude; // 緯度 CLLocationDegrees longitude; // 經度 } CLLocationCoordinate2D;
* 通常用CLLocationCoordinate2DMake函數來建立CLLocationCoordinate2D
初始化方法1: CLLocationCoordinate2D startPt = (CLLocationCoordinate2D){0, 0}; //緯度,經度 CLLocationCoordinate2D endPt = (CLLocationCoordinate2D){0, 0};
初始化方法2: CLLocationCoordinate2D coords = CLLocationCoordinate2DMake(39.915352,116.397105);//緯度,經度
> 橫跨經度\緯度越大(1° ≈ 111km),表示的範圍就越大,在地圖上看到的東西就越小
使用模擬器模擬位置:
*若是是模擬器,須要設置模擬位置(經緯度)
*天朝帝都的經緯度是:北緯40°,東經119°
用戶隱私保護:
4.CLGeocoder
* 使用CLGeocoder能夠完成「地理編碼」和「反地理編碼」
地理編碼:根據給定的地名,得到具體的位置信息(好比經緯度、地址的全稱等)
地理編碼方法 - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler; 反地理編碼方法 - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
* 當地理\反地理編碼完成時,就會調用CLGeocodeCompletionHandler
typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);
*這個block傳遞2個參數
error :當編碼出錯時(好比編碼不出具體的信息)有值
5.CLPlacemark(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;