#pragma mark---*定位:
一、介紹
1、定位使用CoreLocation框架
2、功能:(1)基礎(chǔ)定位-所在位置的信息(2)地理編碼-把地名轉(zhuǎn)換成地理位置、反編碼-把地理位置轉(zhuǎn)換成地名
3、IOS8、IOS9之后的變化
-IOS8:只有使用定位服務才向用戶請求
(1)添加了定位服務的目的寫在Info.plist里面-添加以下
《1》NSLocationAlwaysUsageDescription一直使用
《2》NSLocationWhenInUseUsageDescription當使用時
《3》如果忘記寫就不能使用定位功能、沒有提示信息
(2)得請求用戶授權(quán)在代碼里面添加請求
《1》requestAlwaysAuthorization
《2》requestWhenInUseAuthorization
《3》如果和描述的目的不匹配,也不能使用定位功能
-IOS9:
(1)按Home鍵進入后臺如果需要繼續(xù)定位
《1》需要在Info.plist文件里面添加Required
background modes -> App registers for location updates如果不添加這對鍵值卻使用;后臺定位功能會直接崩潰
《2》在代碼里面需要添加屬性allowsBackgroundLocationUpdates需要同時設置成YES
//獲得系統(tǒng)的版本
if ([[UIDevice
currentDevice].systemVersionfloatValue]
>= 8.0) {
}
二、使用
1、使用定位服務所需要的相關(guān)類和所需要的其他數(shù)據(jù)類型
(1)CLLocationManager定位的管理者,通過它創(chuàng)建定位服務的功能
//設置多少米去更新一次位置信息
locationManager.distanceFilter= 100;
//設置定位的精準度
locationManager.desiredAccuracy= 10;
(2)CLLocation地理位置信息相關(guān)的類,
《1》coordinate:經(jīng)緯度(latitude緯度、longitude經(jīng)度)東經(jīng)正數(shù)西經(jīng)負數(shù)
《2》altitude:高度
《3》horizontalAccuracy:水平的精準度,可以用它檢測是否定位成功。如果是正數(shù)=定位成功
《4》verticalAccuracy:垂直的精準度
《5》course:航向0.0 ~ 359.9真北方向為0.0當前設備前進的方向0°表示向北90°表示向東180°表示向南270°表示向西
《6》speed:速度
《7》timestamp:時間戳
《8》floor:樓層高度level:層數(shù)
(3)CLLocationCoordinate2D經(jīng)緯度信息的數(shù)據(jù)類型-坐標(是一個結(jié)構(gòu)體,而不是類)
(4)CLRegion表示范圍的類
(5)CLGeocoder地理編碼、反地理編碼的類
(6)CLPlacemark表示地標的類(地址信息、用文字表示位置信息的類,里面同時包含了LocaTion)
(7)CLHeading表示導航方向的類(航向)
//獲得地磁方向
CLLocationDirection
direction = newHeading.magneticHeading;
//角度=地磁方向*π/180; M_PI:π的宏定義
CGFloat angle = M_PI*direction/180;
//設置圖片的角度
compassView.transform
= CGAffineTransformMakeRotation(angle);
(8)
(9)CLLocationDistance:距離
2、具體使用
(1)定位的操作步驟
《1》導入框架
《2》檢查用戶是否在設置中打開了定位服務
[CLLocationManager locationServicesEnabled];
《3》初始化定位對象(盡量使用屬性或者全局變量創(chuàng)建)
desiredAccuracy:精度設置
distanceFilter:多少米更新一次
《4》info中添加描述使用定位的目的并向用戶申請授權(quán)
《5》掛上代理,并實現(xiàn)代理方法
-
(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray
*)locations成功的時候調(diào)用
- (void)locationManager:(CLLocationManager *)manager失敗的時候調(diào)用
didFailWithError:(NSError*)error
《6》如果需要使用后臺定位服務,需要在info中添加Required background modes這個key以及它里面的元素App
registers for location updates
《7》開始定位startUpdatingLocation
(2)地理編碼、反編碼
1、反地理編碼:把位置信息轉(zhuǎn)換成地名(文字)
用處:可以通過點擊選擇地圖上的某一個位置來獲得這個位置文字的描述
<1>location:位置信息
<2>region:范圍
<3>addressDictionary:地址信息字典
1、name:地名
2、thoroughfare:街道
3、subThoroughfare:街道的副標題
4、locality:城市
5、subLocality:城市的相關(guān)信息
6、administrativeArea:州省
7、subAdministrativeArea:州省相關(guān)信息
8、postalCode:郵政編碼
9、ISOcountryCode:國家編碼
10、country:國家
11、inlandWater:水源湖泊
12、ocean:海洋
13、areasOfInterest:相關(guān)的地標
2、地理編碼:把地名轉(zhuǎn)換成位置信息
用處:通過文字描述的位置轉(zhuǎn)換成地圖上的經(jīng)緯度
3、地理編解碼在編解碼的時候是一個耗時的操作可以使用異步操作,不然會堵塞主線程