//需要导入系统动画定位的头文件
#import
//类的扩展(私有的属性.方法)
@interface ViewController() //提示作用
{
//成员变量(自动释放),全局变量在dealloc方法中释放,dealloc方法会在当前类对象的引用计数变成0的时候调用,根视图对象是不会释放掉的,除非切换根视图或者关闭该应用
//定位对象
CLLocationManager *manager;
//地理编码对象(经纬度)
CLGeocoder *_coder;
}
//系统适配屏幕适配图片适配
//Xcode8,对应ios10 Xcode7,对应ios9 Xcode6,对应ios8 Xcode5,对应ios7
//判断定位是否可用(真机可用)
if([CLLocationManager locationServicesEnabled]) {
NSLog(@"---定位可用");
} else {
NSLog(@"+++定位不可用");
}
//定位方式GPS .基站. WiFi,到底用哪个定位,不确定(看苹果公司的定位系统)
manager = [[CLLocationManager alloc] init];
//移动多少距离定位一次(频繁,耗电).精确度越高,越费电
manager.distanceFilter = kCLLocationAccuracyKilometer;
//精确度
manager.desiredAccuracy = 100;
//设置代理
manager.delegate = self;
//开始定位
[manager startUpdatingLocation];
//条件编译,如果当前系统存在这个宏,就编译里面的语句,否则不编译
#ifdef __IPHONE_8_0
//从ios8开始需要请求授权保护用户'隐私'
//当你使用到定位的时候开启点位
[manager requestWhenInUseAuthorization];
//一直打开定位
[manager requestAlwaysAuthorization];
/*
百度地图---下面的'地图开发平台'---ios开发----'定位功能'中可找到
需要在Info.plist文件中对应的添加如下配置:
(1)NSLocationAlwaysUsageDescription
(2)NSLocationWhenInUseUsageDescription
*/
#endif
//模拟器的Debug的Location---Custom Location (经纬度-->百度地图,拾取工具)
//判断朝向
if([CLLocationManager headingAvailable]) {
NSLog(@"朝向服务可用---");
} else {
NSLog(@"朝向不可用");
}
//更新朝向必须真机测试
[manager startUpdatingHeading];
//初始化对象
_coder= [[CLGeocoderalloc]init];
//编码
[_coder geocodeAddressString:@"福建省福州市" completionHandler:^(NSArray *_Nullableplacemarks,NSError*_Nullableerror) {
CLPlacemark *mark = [placemarkslastObject];
CLLocation *loc = mark.location;
CLLocationCoordinate2D coor = loc.coordinate;
CLLocationDegrees lat = coor.latitude;
CLLocationDegrees lon = coor.longitude;
NSLog(@"---%f====%f",lat,lon);
}];
#pragma mark -- CLLocationManagerDelegate
//用户位置发生变化的时候回调用
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0) {
//定位只能在国内
CLLocation *loc = [locations lastObject];
//海拔
CLLocationDistance alti = loc.altitude;
//经纬度
CLLocationCoordinate2D coor = loc.coordinate;
//纬度
CLLocationDegrees lat = coor.latitude;
//经度
CLLocationDegrees lon = coor.longitude;
//不是真机alti===0000000
NSLog(@">>>>%f,>>>>>>%f,>>>>>%f",alti,lat,lon);
//这里的location对象需要自己创建
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:latlongitude:lon];
//反编码
[_coder reverseGeocodeLocation:loc2 completionHandler:^(NSArray *_Nullableplacemarks,NSError *_Nullableerror) {
//CLPlacemark是位置位置
CLPlacemark *mark = [placemarks lastObject];
NSLog(@"%@",mark.addressDictionary);
// NSLog(@"3333%@@",error);
}];
//系统地图是高德地图
//火星坐标系(有变差的坐标系);一般大公司有自己地图,用的是火星坐标
//地图的编码和反编码必须用同一套地图
//停止定位
//[manager stopUpdatingLocation];
}
//当用户朝向发生变化的时候调用
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
//地磁北极不准容易受到磁场的干扰
CLLocationDirection mag = newHeading.magneticHeading;
//地理北极0---359.9 0是北方
CLLocationDirection north = newHeading.trueHeading;
//精确度
CLLocationDirection acc = newHeading.headingAccuracy;
}