定位服务
iOS提供了四种不同的定位服务,分别是
- WiFi 通过WiFi的地理位置信息查询,比较省电
- 蜂窝式移动电话基站 通过移动运营商基站进行定位
- GPS卫星 通过GPS卫星进行定位,定位准确但是耗电量大
- iBeacon iOS7之后支持iBeacon技术,iBeacon技术是苹果研发的基于低功耗蓝牙技术,通过多个IBeacon基站创建一个信号区域(地理围栏),当设备进入到该区域后就会,相应的应用程序便会提示用户进入了地理围栏.
定位服务编程
- 定位服务框架主要是Core Location,定位时主要使用CLLocationManager,CLLocationManagerDelegate,CLLocation三个类
- CLLocationManager 用于定位服务管理类,可以给我们提供位置信息和高度信息,也可以监控设备进入或者离开某个区域,还可以获取设备的运行方向.
- CLLocationManagerDelegate是CLLocationManager的委托协议
- CLLocation封装了位置和高度信息
- (void)viewDidLoad {
[super viewDidLoad];
self.manager = [[CLLocationManager alloc] init];
_manager.delegate = self;
_manager.desiredAccuracy = kCLLocationAccuracyBest;
_manager.distanceFilter = 100.0f;
[_manager requestWhenInUseAuthorization];
[_manager requestAlwaysAuthorization];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
NSLog(@"更新了位置信息:");
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[_manager stopUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"失败,错误信息为%@",error);
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
}
- 注:需要在info.plist文件中添加NSLocationWhenInUseUsageDescription属性用来告知用户定位的目的,否则不会出现授权界面
地理信息反编码
- 通过地理坐标返回某个地点的相关文字描述信息,封装在CLPlacemark中.地理信息反编码通过CLGeocoder类实现,通过reverseGeocodeLocation: completionHandler:^(NSArray < CLPlacemark > _Nullable placemarks, NSError * _Nullable error) 来实现的.
地理信息编码查询
- 通过地理信息文字描述获取相应的地理坐标,查询结果是一个集合.
- 主要通过这三个方法:
- coder geocodeAddressString: completionHandler: 指定一个地址字符串参数进行查询
- coder geocodeAddressDictionary: completionHandler:指定一个地址信息字典参数进行查询
- coder geocodeAddressString: inRegion: completionHandler:通过指定地址字符串和指定区域进行查询,inRegion是查询范围,CLRegion类型
使用苹果自带地图
未完待续