CoreLocation获取当前位置信息

参考来源一: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>协议;

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

 1 #import "ViewController.h"
2 #import "CoreLocation/CoreLocation.h"
3
4 @implementation ViewController
5
6 CLLocationManager *locationManager;
7 CLLocation* startingPoint;//开始位置
8 - (void)viewDidLoad
9 {
10 [super viewDidLoad];
11 // Do any additional setup after loading the view, typically from a nib.
12
13
14 //创建一个位置管理器
15 locationManager = [[CLLocationManager alloc] init];//初始化
16 locationManager.delegate=self;//委托自己
17 locationManager.desiredAccuracy=kCLLocationAccuracyBest;//精度设定,有好几种选择(kCLLocationAccuracyNearestTenMeters,kCLLocationAccuracyHundredMeters,kCLLocationAccuracyKilometer,kCLLocationAccuracyThreeKilometers精度逐渐降低)
18 locationManager.distanceFilter=1000.0f;//设置距离筛选器
19 [locationManager startUpdatingLocation];//开启位置更新
20
21 }
22
23
24 #pragma mark - CLLocationManagerDelegate Methods
25 /*
26 *确定当前位置和位置更新时调用该方法
27 */
28 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
29 //获取经度
30 NSString *latitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.latitude];
31 //latitudeLabel.text=latitudeString;
32 [latitudeString release];
33
34 //获取纬度
35 NSString *longitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.longitude];
36 //longitudeLabel.text=longitudeString;
37 [longitudeString release];
38
39 if(startingPoint==nil)
40 startingPoint= newLocation;
41 //newLocation.coordinate.latitude;//经度
42 //newLocation.coordinate.longitude;//纬度
43 //newLocation.horizontalAccuracy;//水平精度
44 //newLocation.altitude;//高度
45 //newLocation.verticalAccuracy;//垂直精度
46
47 CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint];//移动的距离
48 NSString *distanceString = [[NSString alloc] initWithFormat:@"%gm",distance];//格式化移动距离
49 NSLog(@"distanceString:%@",distanceString);
50 }
51
52 /*
53 *位置查询遇到错误时调用这个方法
54 */
55
56 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
57
58 NSString *errorType = (error.code == kCLErrorDenied) ? @"Access Denied" : @"Unknown Error";
59
60 UIAlertView *alert = [[UIAlertView alloc]
61 initWithTitle:@"Error getting Location"
62 message:errorType
63 delegate:nil
64 cancelButtonTitle:@"Okay"
65 otherButtonTitles:nil];
66
67 [alert show];
68 [alert release];
69
70 }




原文地址:https://www.cnblogs.com/foxmin/p/2394499.html