您的位置:首页 > 其它

CoreLocation获取当前位置信息

2012-03-13 21:17 435 查看
参考来源一:http://xiongzhend.blog.163.com/blog/static/64098501201041383342989/

参考来源二: http://blog.iosxcode4.com/archives/23 

  iPhone可以使用CoreLocation框架确定他的物理位置,可以利用三种技术来实现该功能:GPS,WiFi定位和蜂窝基站三角网定位。但在程序中我们只需设定我们希望的精度级别,由CoreLocation决定采用哪种技术可以更好的满足我们的请求。

1.Wi-Fi定位扫描本地路由器,使用它们的MAC地址搜索一个中心位置数据库,所有iPhone和iPod touch平台都免费提供了这种定位方式。

2.蜂窝定位则依赖于天线,但是只有iPhone上才有这样的天线。这种技术利用本地蜂窝基站进行三角定位,这些基站的位置是在手机公司安装基站时就确 定的。最后一种、也是最准确的一种定位方式是GPS,只有第二代和更新的iPhone才提供GPS。第一代iPhone没有内置GPS,目前所有iPod touch设备也没有提供GPS。

3.第三代iPhone 3G S引入了一个内置的罗盘(通过一个磁强计),并提供了用于支持它的Core Location API。

首先,将CoreGraphics.framework 加入到framework;

其次,声明中要加入<CLLocationManagerDelegate>协议;

接下来是获取数据和实现委托:

#import "ViewController.h"
#import "CoreLocation/CoreLocation.h"

@implementation ViewController

CLLocationManager *locationManager;
CLLocation* startingPoint;//开始位置
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

//创建一个位置管理器
locationManager = [[CLLocationManager alloc] init];//初始化
locationManager.delegate=self;//委托自己
locationManager.desiredAccuracy=kCLLocationAccuracyBest;//精度设定,有好几种选择(kCLLocationAccuracyNearestTenMeters,kCLLocationAccuracyHundredMeters,kCLLocationAccuracyKilometer,kCLLocationAccuracyThreeKilometers精度逐渐降低)
locationManager.distanceFilter=1000.0f;//设置距离筛选器
[locationManager startUpdatingLocation];//开启位置更新

}

#pragma mark - CLLocationManagerDelegate Methods
/*
*确定当前位置和位置更新时调用该方法
*/
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
//获取经度
NSString *latitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.latitude];
//latitudeLabel.text=latitudeString;
[latitudeString release];

//获取纬度
NSString *longitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.longitude];
//longitudeLabel.text=longitudeString;
[longitudeString release];

if(startingPoint==nil)
startingPoint= newLocation;
//newLocation.coordinate.latitude;//经度
//newLocation.coordinate.longitude;//纬度
//newLocation.horizontalAccuracy;//水平精度
//newLocation.altitude;//高度
//newLocation.verticalAccuracy;//垂直精度

CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint];//移动的距离
NSString *distanceString = [[NSString alloc] initWithFormat:@"%gm",distance];//格式化移动距离
NSLog(@"distanceString:%@",distanceString);
}

/*
*位置查询遇到错误时调用这个方法
*/

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{

NSString *errorType = (error.code == kCLErrorDenied) ? @"Access Denied" : @"Unknown Error";

UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Error getting Location"
message:errorType
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil];

[alert show];
[alert release];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: