1 #import "ViewController.h"
2 #import <CoreLocation/CoreLocation.h>
3 @interface ViewController ()<CLLocationManagerDelegate>
4
5 @property (nonatomic,strong)CLLocationManager *manager ;
6 @end
7
8 @implementation ViewController
9
10 - (void)viewDidLoad {
11 [super viewDidLoad];
12
13 /*
14 定位的方式
15 1.手机基站:(依赖于手机站(信息塔)的密集程度)
16 2.GPS卫星定位:精确度高,但是费电
17 3.WIFI:上网的IP地址,(必须要能上网)
18 */
19
20 //定位管理器
21 self.manager = [[CLLocationManager alloc] init];
22
23 // if (![CLLocationManager locationServicesEnabled]) {
24 //
25 // NSLog(@"定位服务当前可能尚未打开,请设置打开!");
26 //
27 // return ;
28 // }
29
30
31
32
33
34 //判断当前的系统版本号
35 if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
36
37 //说明当前的系统是大于或者等于8.0的系统版本号
38
39 // 需要在plist文件中添加默认缺省的字段“NSLocationAlwaysUsageDescription”,这个提示是:“允许应用程序在您并未使用该应用程序时访问您的位置吗?”NSLocationAlwaysUsageDescription对应的值是告诉用户使用定位的目的或者是标记。
40
41 //需要在plist文件中添加默认缺省的字段“NSLocationWhenInUsageDescription”,这个时候的提示是:“允许应用程序在您使用该应用程序时访问您的位置吗?”
42
43 //向用户请求我们的程序使用位置
44 [self.manager requestAlwaysAuthorization];
45 [self.manager requestWhenInUseAuthorization];
46
47 }
48
49 //设置定位精度(更新距离)---实质就是让代理方法重新走一次
50 self.manager.distanceFilter = 10.0 ;
51
52 //设置代理
53 _manager.delegate = self ;
54
55 //启动实时定位的功能
56 [_manager startUpdatingLocation];
57
58 //启动手机朝向的功能
59 }
60
61 #pragma mark --更新最新的位置
62 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
63 {
64
65 // NSLog(@"%@",locations);
66
67 //获取当前的最新位置
68 CLLocation *location = (CLLocation *)[locations lastObject];
69
70 //从位置信息中获取经纬度
71 double lat = location.coordinate.latitude ;
72 double lon = location.coordinate.longitude ;
73
74 NSLog(@"%f %f",lat,lon);
75
76
77 //使用位置反编码解析位置信息
78 CLGeocoder *geocoder = [[CLGeocoder alloc] init];
79
80 //使用该对象获得该位置信息
81
82 [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
83
84 //遍历解析出来的位置信息
85 for (CLPlacemark *placeMark in placemarks) {
86
87 NSLog(@"%@",placeMark);
88
89 /*
90 NSString *name=placemark.name; //地名
91 NSString *thoroughfare=placemark.thoroughfare; //街道
92 NSString *subThoroughfare=placemark.subThoroughfare; //街道相关信息,例如门牌等
93 NSString *locality=placemark.locality; // 城市
94 NSString *subLocality=placemark.subLocality; // 城市相关信息,例如标志性建筑
95 NSString *administrativeArea=placemark.administrativeArea; // 州
96 NSString *subAdministrativeArea=placemark.subAdministrativeArea; //其他行政区域信息
97 NSString *postalCode=placemark.postalCode; //邮编
98 NSString *ISOcountryCode=placemark.ISOcountryCode; //国家编码
99 NSString *country=placemark.country; //国家
100 NSString *inlandWater=placemark.inlandWater; //水源、湖泊
101 NSString *ocean=placemark.ocean; // 海洋
102 NSArray *areasOfInterest=placemark.areasOfInterest; //关联的或利益相关的地标
103
104 */
105 }
106
107 }];
108
109
110 //如果不需要实时定位,使用完即使关闭定位服务
111 [_manager stopUpdatingLocation];
112
113 }
114
115
116 #pragma amrk --更新手机朝向
117 -(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
118 {
119 //获得手机里面的磁场方面
120 int header = newHeading.magneticHeading ;
121
122 if ((315<=header && header<=360) || (0<header && header<=45)){
123
124 NSLog(@"朝向北面");
125 }
126 else if (45< header && header<=135){
127
128 NSLog(@"朝向东面");
129 }
130 else if (135< header && header<=225){
131
132 NSLog(@"朝向南面");
133 }
134 else if (225< header && header<315){
135
136 NSLog(@"朝向西面");
137 }
138
139 }