1. 應(yīng)用場(chǎng)景
周邊信息(lbs): 找餐館,找ktv,找電影院(大眾點(diǎn)評(píng),美團(tuán))
導(dǎo)航:根據(jù)用戶設(shè)定的起點(diǎn)和重點(diǎn)來(lái)規(guī)劃路線。并指導(dǎo)用戶如何到達(dá)。(高德地圖,百度地圖)
(apple 地圖的中國(guó)代理商是高德地圖)
熱門術(shù)語(yǔ):
LBS: Location Based Service; 基于定位的服務(wù)
SoLoMo:Social Local Mobile (索羅門) 社交本地移動(dòng)
2. 使用的框架
MapKit : 地圖展示
CoreLocatio : 地理定位
3. Location
Location 的主要功能
- 地理定位: 獲取設(shè)備當(dāng)前經(jīng)緯度。
- 地理編碼:
- 地理編碼 : 將地理位置信息轉(zhuǎn)換為經(jīng)緯度。(湖南,長(zhǎng)沙,岳麓區(qū), (28.212875, 112.889938)
- 反地理編碼:將經(jīng)緯度轉(zhuǎn)換為地理位置信息。((28.212875, 112.889938), 湖南,長(zhǎng)沙,岳麓區(qū) )
- 區(qū)域監(jiān)聽(tīng): 在一個(gè)區(qū)域內(nèi)確認(rèn)一個(gè)中點(diǎn),以中點(diǎn)畫(huà)圓。 當(dāng)用戶進(jìn)入圓或出圓的時(shí)候回調(diào)代理通知。 通知中會(huì)包含是進(jìn)入還是退出。
- 用到的框架
#import <CoreLocation/CoreLocation.h>
- 主要使用的類:
CLLocationManager
// CLLocationManager位置管理器 使用Core Location框架來(lái)確定iphone的位置(GPS,蜂窩基站三角網(wǎng),wps三種方式)
- 授權(quán)
iOS8.0之后前臺(tái)定位授權(quán)和后臺(tái)定位授權(quán)
(授權(quán): 主要是 apple 加強(qiáng)的對(duì)用戶隱私的保護(hù)。 在沒(méi)有授權(quán)的情況下,用戶是不可能拿到用戶的位置信息。 )
// 主要體現(xiàn)是開(kāi)啟后臺(tái)定位授權(quán)
[self.locationManager requestAlwaysAuthorization];
info.plist 配置修改: 添加 NSLocationAlwaysUsageDescription key
2017-03-20 15:03:23.044 Location&Map[20029:4356781] This app has attempted to access privacy-sensitive data without a usage description.
The app's Info.plist must contain an NSLocationAlwaysUsageDescription key with a string value explaining to the user how the app uses this data
后臺(tái)開(kāi)啟定位授權(quán)
// 開(kāi)啟前臺(tái)定位授權(quán)
[self.locationManager requestWhenInUseAuthorization];
info.plist 配置修改: 添加 NSLocationWhenInUseUsageDescription key
2017-03-20 15:06:44.381 Location&Map[20097:4377840] This app has attempted to access privacy-sensitive data without a usage description.
The app's Info.plist must contain an NSLocationWhenInUseUsageDescription key with a string value explaining to the user how the app uses this data
前臺(tái)開(kāi)啟定位授權(quán)
導(dǎo)航開(kāi)啟標(biāo)志
- 開(kāi)始定位 (更新定位信息)
[self.locationManager startUpdatingLocation];
- 獲取定位
定位信息是通過(guò)代理回調(diào)的。
- 5.1 設(shè)置代理
self.locationManager.delegate = self;
- 5.2 實(shí)現(xiàn)代理方
// 這個(gè)方法調(diào)用非常的頻繁,使用的是手機(jī)的硬件,非常的耗電。
// 僅僅是用來(lái)拿到用戶的位置,拿到之后,就必須停止定位
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
// 1.獲取用戶位置的對(duì)象(lastObject: 表示獲取的是最新的位置)
CLLocation *location = [locations lastObject];
// 獲取坐標(biāo)信息
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"緯度:%f 經(jīng)度:%f", coordinate.latitude, coordinate.longitude);
// 2.停止定位 ( 可以停止代理方法的調(diào)用 )
[manager stopUpdatingLocation];
}
```
模擬器是沒(méi)有地理位置信息的, 我們可以進(jìn)行默認(rèn)設(shè)置。

## 4. Location 的項(xiàng)目使用
只要發(fā)送一個(gè)經(jīng)緯度發(fā)送給服務(wù)器,服務(wù)器返回一個(gè)json文件。json 里面是包含位置信息。( 某一個(gè)范圍內(nèi)的銀行的地理位置,名稱, 電話等信息)