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), 湖南,长沙,岳麓区 )
  • 区域监听: 在一个区域内确认一个中点,以中点画圆。 当用户进入圆或出圆的时候回调代理通知。 通知中会包含是进入还是退出。
  1. 用到的框架
    #import <CoreLocation/CoreLocation.h>
    
  2. 主要使用的类:
    CLLocationManager
    // CLLocationManager位置管理器  使用Core Location框架来确定iphone的位置(GPS,蜂窝基站三角网,wps三种方式)
    
  3. 授权 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
    

    前台开启定位授权 导航开启标志

  4. 开始定位 (更新定位信息)
    [self.locationManager startUpdatingLocation];
    
  5. 获取定位
    定位信息是通过代理回调的。

    • 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];
      }
      

      模拟器是没有地理位置信息的, 我们可以进行默认设置。
      模拟器经纬度修改

4. Location 的项目使用

只要发送一个经纬度发送给服务器,服务器返回一个json文件。json 里面是包含位置信息。( 某一个范围内的银行的地理位置,名称, 电话等信息)

results matching ""

    No results matching ""