一.基本知识
iPhone可以使用CoreLocation框架确定他的物理位置,可以利用三种技术来实现该功能:GPS,WiFi定位和蜂窝基站三角网定位。但在程序中我们只需设定我们希望的精度级别,由CoreLocation决定采用哪种技术可以更好的满足我们的请求。
二.
//
clLocationManager= [[CLLocationManageralloc] init];
clLocationManager.delegate= self; //设置代理
/*
精确度级别:
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest //使用当前可用精确度最高的方法
kCLLocationAccuracyNearestTenMeters //10米
kCLLocationAccuracyHundredMeters //100米
kCLLocationAccuracyKilometer //1000米
kCLLocationAccuracyThreeKilometers //3000米
double类型,可以自定义
*/
clLocationManager.desiredAccuracy= kCLLocationAccuracyBest; //指定请求精确度级别-10米
/*
距离筛选器
kCLDistanceFilterNone
double类型,可以自定义
*/
clLocationManager.distanceFilter = 10.0f; //距离筛选器-仅当位置更改超过特定的数量时才通知你
[clLocationManagerstartUpdatingLocation]; //启动位置管理器
// [clLocationManager stopUpdatingLocation]; //停止位置管理器
三.CLLocationManagerDelegate协议
#pragma mark CLLocationManagerDelegate
//获取位置更新
- (void) locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation
{
// newLocation.coordinate.latitude; //经度
// newLocation.coordinate.longitude;//纬度
// newLocation.horizontalAccuracy; //已coordinate作为中心的一个圆的半径-值越大说明CoreLocation所确定的位置越不准确。为负值,则表示因为某些原因,不确定
// newLocation.altitude; //在海平面以上还是以下多少米
// newLocation.verticalAccuracy;//表示CoreLocation在其精确度的还把方面的精确度。如果为负值,则表示无法确定有效的海拔
// newLocation.timestamp; //告知位置管理器确定为位置的时间
// CLLocationDistance tmpDistance = [oldLocation getDistanceFrom:newLocation];
}
//无法确定你当前位置
- (void) locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error
{
//最有可能的错误原因是用户拒绝方位。因为:位置管理器的使用必须由用户进行授权,因此应用程序在第一次确定位置的时候,会在屏幕上弹出一个警告:询问用户是否确定让当前程序访问你的位置。
NSString*errorType = (error.code== kCLErrorDenied)?@"Access Denied": @"Unknow Error";
}