蘋果在中國的地圖服務商是高德
1:定位使用的生活場景
在移動互聯網時代,移動app能解決用戶的不少生活雜事,好比導航:去任意陌生的地方
周邊:找餐館、找酒店、找銀行、找電影院
在上述應用中,都用到了地圖和定位功能
2:iOS定位依賴的框架
在iOS開發中,要想加入這2大功能,必須基於2個框架進行開發
Map Kit :用於地圖展現(比較重量級)
Core Location :用於地理定位
Map Kit的定位是基於Core Location的
iOS定位熱門術語:
LBS :Location Based Service
SoLoMo :Social Local Mobile(索羅門)
3:CoreLocation框架使用
CoreLocation框架使用前提
導入框架
導入主頭文件
#import <CoreLocation/CoreLocation.h>
CoreLocation框架使用須知:
CoreLocation框架中全部數據類型的前綴都是CL
CoreLocation中使用CLLocationManager對象來作用戶定位
4:CLLocationManager的經常使用操做
開始用戶定位
- (void)startUpdatingLocation;
中止用戶定位
- (void) stopUpdatingLocation;
當調用了startUpdatingLocation方法後,就開始不斷地定位用戶的位置,中途會頻繁地調用代理的下面方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
locations參數裏面裝着CLLocation對象
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個位置之間的距離
@property(assign, nonatomic) CLLocationDistance distanceFilter;
每隔多少米定位一次
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
定位精確度(越精確就越耗電)
CLLocationCoordinate2D是一個用來表示經緯度的結構體,定義以下
typedef struct {git
CLLocationDegrees latitude; // 緯度app
CLLocationDegrees longitude; // 經度框架
} CLLocationCoordinate2D;函數
通常用CLLocationCoordinate2DMake函數來建立CLLocationCoordinate2D
5:用戶隱私的保護
從iOS 6開始,蘋果在保護用戶隱私方面作了很大的增強,如下操做都必須通過用戶批准受權
要想得到用戶的位置
想訪問用戶的通信錄、日曆、相機、相冊等等
當想訪問用戶的隱私信息時,系統會自動彈出一個對話框讓用戶受權
5.1
開發者能夠在後綴名爲Info.plist的文件中
設置NSLocationUsageDescription說明定位的目的(Privacy - Location Usage Description)
一旦用戶選擇了「Don’t Allow」,意味着你的應用之後就沒法使用定位功能
爲了嚴謹起見,最好在使用定位功能以前判斷當前應用的定位功能是否可用
CLLocationManager有個類方法能夠判斷當前應用的定位功能是否可用
+ (BOOL)locationServicesEnabled;