1. 应用场景
周边信息(lbs): 找餐馆,找ktv,找电影院(大众点评,美团)
导航:根据用户设定的起点和重点来规划路线。并指导用户如何到达。(高德地图,百度地图)
(apple 地图的中国代理商是高德地图)
热门术语:
LBS: Location Based Service; 基于定位的服务
SoLoMo:Social Local Mobile (索罗门) 社交本地移动
2. 使用的框架
MapKit : 地图展示
CoreLocatio : 地理定位
3. Location
Location 的主要功能
- 地理定位: 获取设备当前经纬度。
- 地理编码:
- 地理编码 : 将地理位置信息转换为经纬度。(湖南,长沙,岳麓区, (28.212875, 112.889938)
- 反地理编码:将经纬度转换为地理位置信息。((28.212875, 112.889938), 湖南,长沙,岳麓区 )
- 区域监听: 在一个区域内确认一个中点,以中点画圆。 当用户进入圆或出圆的时候回调代理通知。 通知中会包含是进入还是退出。
- 用到的框架
#import
- 主要使用的类:
CLLocationManager
// CLLocationManager位置管理器 使用Core Location框架来确定iphone的位置(GPS,蜂窝基站三角网,wps三种方式)
- 授权
iOS8.0之后前台定位授权和后台定位授权
(授权: 主要是 apple 加强的对用户隐私的保护。 在没有授权的情况下,用户是不可能拿到用户的位置信息。 )
// 主要体现是开启后台定位授权
[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
// 开启前台定位授权
[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
- 开始定位 (更新定位信息)
[self.locationManager startUpdatingLocation];
- 获取定位
定位信息是通过代理回调的。
- 5.1 设置代理
self.locationManager.delegate = self;
- 5.2 实现代理方
// 这个方法调用非常的频繁,使用的是手机的硬件,非常的耗电。
// 仅仅是用来拿到用户的位置,拿到之后,就必须停止定位
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
// 1.获取用户位置的对象(lastObject: 表示获取的是最新的位置)
CLLocation *location = [locations lastObject];
// 获取坐标信息
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"纬度:%f 经度:%f", coordinate.latitude, coordinate.longitude);
// 2.停止定位 ( 可以停止代理方法的调用 )
[manager stopUpdatingLocation];
}
```
模拟器是没有地理位置信息的, 我们可以进行默认设置。
![模拟器经纬度修改](http://upload-images.jianshu.io/upload_images/446092-4f3a0ce1c459fcd9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 4. Location 的项目使用
只要发送一个经纬度发送给服务器,服务器返回一个json文件。json 里面是包含位置信息。( 某一个范围内的银行的地理位置,名称, 电话等信息)