最重要的两个框架:CoreLocation 和MapKit
1.一次定位
1.1思路:
- 创建强引用(默认是弱引用,出了作用域就不起作用了)的CLLocationManager对象
- 获取用户授权,两种方式:① 只有用户同意授权且程序在前台才会定位,冒号后为需要在Info.plist中配置的key值 requestWhenInUseAuthorization : NSLocationWhenInUseUsageDescription ②程序在前台后台都会定位requestAlwaysAuthorization:NSLocationAlwaysUsageDescription
- 开始位置更新startUpdatingLocation
- 设置代理,调用代理方法来获取当前位置
- 由于代理方法会一致调用,非常耗电,因此需要进行如下的一些设置,在满足一定条件的情况下再去定位.
① distanceFilter,当用户改变位置一定值后才会调用。(如后面跟50,即改变50米后调用一次代理方法)–>持续定位
② desiredAccuracy–>定位精度–>将周围一定值的范围看作一个地点
6.获取两点间的直线距离的方法:
1.2 需要注意的问题
1> 用户授权时针对上述的不同情况必须进行Info.plist文件的配置
2> iOS9之后,上述第一种授权方式,如果程序在后台运行也需要定位的话,需要使用下边的方法,且也需要在Info.plist文件中进行配置
if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) {
locationManager.allowsBackgroundLocationUpdates = YES;
}
具体配置方法:
在plist中添加”Required background modes” 在字典中添加值”App registers for location updates”
2.地理编码/反地理编码
概念: 地理编码就是将地址转化为经纬度,反地理编码就是讲经纬度转化为地址.
1.1 思路
1> 创建CLGeocoder对象
2> 调用地理编码和反地理编码(reverse)对应的方法
3> 从CLPlacemark对象中获取需要的内容