IOS学习笔记17——Core Location
来源:互联网 发布:6g网络什么时候出来 编辑:程序博客网 时间:2024/06/05 16:09
IOS支持三种检测当前位置的方式:手机基站、Wi-Fi、和GPS,其中GPS是经度最高的,同时也是最耗费手机电量的。一般情况下在室内是无法通过GPS获取位置信息的,通过Wi-Fi获取位置的原理是通过网络提供商的IP地址信息来获取位置,经度不是很高,最后是通过手机基站获取位置,手机开机后会连接附近的基站塔获取信号,通过基站可以得到手机所在的位置信息,基站越密集,所获取的位置信息经度就越高。
IOS SDK提供的Core Location能比较好的提供获取位置信息的功能,获取位置信息涉及如下几个类,CLLocationManager(位置管理器), CLLocation, CLLocationManagerdelegate(协议、提供委托方法),CLLocationCoodinate2D(存储坐标位置)
另外CLLocationManager还有几个属性;
desiredAccuracy:位置的精度属性
取值有如下几种:
kCLLocationAccuracyBest
精确度最佳
kCLLocationAccuracynearestTenMeters
精确度10m以内
kCLLocationAccuracyHundredMeters
精确度100m以内
kCLLocationAccuracyKilometer
精确度1000m以内
kCLLocationAccuracyThreeKilometers
精确度3000m以内
distanceFilter:横向移动多少距离后更新位置信息
delegate:响应CLLocationManagerdelegate的对象
下面来构建一个获取位置的例子:
首先建立一个Single View Application工程,然后引入CoreLocation.framework,并在ViewController.h中修改如下:
#import <UIKit/UIKit.h>#import <CoreLocation/CoreLocation.h>@interface ViewController : UIViewController<CLLocationManagerDelegate>{ CLLocationManager *locManager;}@property (retain, nonatomic) IBOutletUILabel *lonLabel;@property (retain, nonatomic) IBOutletUILabel *latLabel;@property (retain, nonatomic) CLLocationManager *locManager;@end
.m文件的实现如下,具体解释在代码注释中说明
#import "ViewController.h"@interfaceViewController ()@end@implementation ViewController@synthesize lonLabel;@synthesize latLabel;@synthesize locManager;- (void)viewDidLoad{ [superviewDidLoad]; //初始化位置管理器 locManager = [[CLLocationManager alloc]init]; //设置代理 locManager.delegate = self; //设置位置经度 locManager.desiredAccuracy = kCLLocationAccuracyBest; //设置每隔100米更新位置 locManager.distanceFilter = 100; //开始定位服务 [locManagerstartUpdatingLocation];}- (void)viewDidUnload{ [selfsetLonLabel:nil]; [selfsetLatLabel:nil]; [superviewDidUnload]; // Release any retained subviews of the main view.}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{ return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);}- (void)dealloc { //停止定位服务 [locManagerstopUpdatingLocation]; [lonLabelrelease]; [latLabelrelease]; [superdealloc];}//协议中的方法,作用是每当位置发生更新时会调用的委托方法-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ //结构体,存储位置坐标 CLLocationCoordinate2D loc = [newLocation coordinate]; float longitude = loc.longitude; float latitude = loc.latitude; self.lonLabel.text = [NSStringstringWithFormat:@"%f",longitude]; self.latLabel.text = [NSStringstringWithFormat:@"%f",latitude]; }//当位置获取或更新失败会调用的方法-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ NSString *errorMsg = nil; if ([error code] == kCLErrorDenied) { errorMsg = @"访问被拒绝"; } if ([error code] == kCLErrorLocationUnknown) { errorMsg = @"获取位置信息失败"; } UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"Location" message:errorMsg delegate:self cancelButtonTitle:@"Ok"otherButtonTitles:nil, nil]; [alertView show]; [alertView release];}@end
最后编译并运行结果如下(在模拟器上得到的经纬度):
加入我们的QQ群或微信公众账号请查看:Ryan's zone公众账号及QQ群
欢迎关注我的新浪微博和我交流:@唐韧_Ryan
- IOS学习笔记17——Core Location
- iOS学习笔记——Core Data
- iOS学习笔记——Core Data
- IOS学习笔记——Core Data
- IOS学习笔记——Core Data
- iOS学习笔记——Core Data
- IOS Core Location
- ios-Core Location框架
- IOS学习笔记16——Core Data
- IOS学习笔记16——Core Data
- IOS学习笔记16——Core Data
- IOS学习笔记16——Core Data
- IOS学习笔记16——Core Data
- iOS——Core Graphic框架学习笔记
- iOS学习笔记14(2)—Core Data 编程指南
- Core Location Framework学习
- Core Location Framework学习
- IOS学习之Core Location定位和MapKit视图使用
- JScrollPane滚动条设置
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——播放音频
- nyoj 434 Jungle Roads
- 《微软:DirectShow开发指南》第三章 Programming DirectShow Applications
- 自定义listview
- IOS学习笔记17——Core Location
- OracleClient和OleDb
- SQLHelper
- windows环境下在eclipse中使用memcache
- 传说中的WCF(2):服务协定的那些事儿
- explorer重启后托盘图标
- javascript学习之event.srcElement
- 今时今日,你还会用JBoss作为Web 服务器吗
- 释放资源中某类型的文件