ios学习笔记—— 定位服务
来源:互联网 发布:共享网络下的防监听 编辑:程序博客网 时间:2024/06/09 19:29
在iOS7中,使用定位服务需手动引入Core Location框架;
需引用<CoreLocation/CoreLocation.h>、<CoreLocation/CLLocationManager.h>两个头文件;
并遵循 CLLocationMangerDelegate 协议。
1、获取当前位置信息(经纬度,海拔)
a.首先在接口中声明两个变量
@interface LLViewController (){ CLLocationManager *locationManger; // 位置管理器 CLLocation *location; // 位置信息}
* CLLocationManger 用于定位服务管理类,他能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可获取设备的运行方向
* CLLocation 该类封装了位置和高度信息
b.初始化CLLocationManger对象
- (void)viewDidLoad{ [super viewDidLoad]; locationManger = [[CLLocationManager alloc] init]; locationManger.delegate = self; locationManger.desiredAccuracy = kCLLocationAccuracyBest; // 定位精度 locationManger.distanceFilter = 1000.0f; // 距离过滤器(位置移动了足够距离才会通知委托程序)}
定位精度有以下6个常量:
kCLLocationAccuracyNearestTenMeters 精确到10米
kCLLocationAccuracyHundredMeters 精确到100米
kCLLocationAccuracyKilometers 精确到1000米
kCLLocationAccuracyThreeKilometers 精确到3000米
kCLLocationAccuracyBest 设备使用电池供电时的最高精度
kCLLocationAccuracyBestForNavigation 导航状态下的最高经度,一般有外接电源时才能使用
定位精度的含义是,在位置变化了指定距离后,才发出一次通知。
c.开始定位与结束定位
- (void) viewWillAppear:(BOOL)animated{ // 在试图控制器正常显示时定位 [super viewWillAppear:animated]; [locationManger startUpdatingLocation];}- (void) viewWillDisappear:(BOOL)animated{ // 关闭定位 [super viewWillDisappear:animated]; [locationManger stopUpdatingLocation];}
d.实现协议
主要使用以下两个方法
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ location = [locations lastObject]; _longitude.text = [NSString stringWithFormat:@"%3.5f", location.coordinate.longitude]; <span style="white-space:pre"></span>// 经度 _latitude.text = [NSString stringWithFormat:@"%3.5f", location.coordinate.latitude];<span style="white-space:pre"></span>// 纬度 _hight.text = [NSString stringWithFormat:@"%3.5f", location.altitude];<span style="white-space:pre"></span>// 海拔}- (void) locationManager: (CLLocationManager *)manager didFailWithError:(NSError *)error{ NSLog(@"error: %@", error);}
其中,coordinate 是一个封装了经度和纬度的结构体,定义如下
typedef struct{
CLLocationDegrees latitude;
CLLocationDegress longtitude;
} CLLocationCoordinate2D;
2.地理信息反编码(提供经纬度,查询地址信息)
地理信息反编码使用CLGeocoder类实现,该类能够实现地址坐标与地理蚊子描述信息之间的转换。CLGeocoder类中进行地理信息反编码的方法是:
- (void) reverseGeocodeLocation:(CLLocation *)location
completionHander:^(NSArray *placemarks, NSError *error)completionHandler;
下为代码,此处是按键触发现实地理信息。
- (IBAction)find:(id)sender { //创建位置 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation: location completionHandler:^(NSArray *array, NSError *error) { if (array.count > 0) { CLPlacemark *placemark = [array objectAtIndex:0]; NSString *pos_str = [NSString stringWithFormat:@" country: %@\n postalCode: %@\n ISOcountryCode: %@\n ocean: %@\n inlandWater: %@\n locality: %@\n subLocality: %@\n administrativeArea: %@\n subAdministrativeArea: %@\n thoroughfare: %@\n subThoroughfare: %@\n name: %@\n ", placemark.country, // 国家 placemark.postalCode, // 邮政编码 placemark.ISOcountryCode, // iso国家代号 placemark.ocean, // 海洋 placemark.inlandWater, // 内陆水域 placemark.administrativeArea, // 行政区域信息 placemark.subAdministrativeArea, // 行政区域附加信息 placemark.locality, // 指定城市信息 placemark.subLocality, // 指定城市附加信息 placemark.thoroughfare, // 指定街道级别信息 placemark.subThoroughfare, // 指定街道级别附加信息 placemark.name]; // 详细地址 self.pos.text = pos_str; } else{ self.pos.text = @"error"; } }];}
3.地理信息编码查询
仍然使用CLGeocoder类,地理信息查询的常用方法有以下三个:
geocodeAddressString:(NSString *) completionHandler:^(NSArray *placemarks, NSError *error)completionHandler
// 通过字符串参数进行查询
geocodeAddressString:(NSString *) inRegion:(CLRegion *) completionHandler:^(NSArray *placemarks, NSError *error)completionHandler
// 通过指定字符串和查询范围作为参数进行查询
geocodeAddressDictionary:(NSDictionary *) completionHandler:^(NSArray *placemarks, NSError *error)completionHandler
- (IBAction)search:(id)sender { CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder geocodeAddressString:_seach_str.text completionHandler:^(NSArray *array, NSError *error){ if (array.count > 0) { CLPlacemark *placemark = [array objectAtIndex:0]; CLLocationCoordinate2D coordinate = placemark.location.coordinate; NSString *pos_str = [NSString stringWithFormat:@" longtitude: %f\n latitude: %f\n", coordinate.longitude, coordinate.latitude]; self.pos.text = pos_str; } else{ self.pos.text = @"Sorry, Not Found!"; } }];}
- ios学习笔记—— 定位服务
- IOS学习之——定位服务1 实现原理
- IOS学习之——定位服务3 地理信息编码
- IOS学习之——定位服务2 实现基本定位
- iOS开发笔记之十一——ios 8地图定位服务问题
- iOS开发—02CoreLocation定位服务
- iOS学习笔记之-定位
- IOS学习之——定位服务4 设置测试位置
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS开发拓展篇—CoreLocation定位服务
- iOS学习之——地图、定位
- iOS学习笔记 地图(一)定位CoreLocation
- 根据metalink脚本学习undo(七)
- Theory:kmp 处理字符串
- Android中使用Notification并通过点击Notification重新启动Activity
- JavaScript基础
- 浮点数在内存中的存放方式
- ios学习笔记—— 定位服务
- ns2 中arp的注释
- 大话设计模式____单一职责模式
- 三个annotation类型(RetentionPolicy,ElementType)
- Java多线程之~~~使用Exchanger在线程之间交换数据
- J2EE规范——JDBC
- CentOS系统中配置Nginx服务器实现反向代理和负载均衡
- EBS 信用检查(二)
- String类