转载

定位功能

实现iOS定位功能首要步骤:当时是新建一个工程啦~ !~

步骤一:导入系统定位的类库   CoreLocation.framework

定位功能

步骤二:

需要在 plist 文件中添加默认缺省的字段 NSLocationAlwaysUsageDescription ,这个提示是 :“ 允许应用程序在您并未使用该应用程序时访问您的位置吗 ”NSLocationAlwaysUsageDescription 对应的值是告诉用户使用定位的目的或者是标记。 ( 无论有用没用应用程序,都获得用户位置 )

需要在 plist 文件中添加默认缺省的字段 NSLocationWhenInUsageDescription ,这个时候的提示是 :“ 允许应用程序在您使用该应用程序时访问您的位置吗

定位功能

接下来,上代码

步骤三:

首先在需要定位的类中导入头文件,并生成定位管理者属性

 #import "ViewController.h" //系统定位的类库 #import <CoreLocation/CoreLocation.h>  @interface ViewController () <CLLocationManagerDelegate>  @property (nonatomic, strong) CLLocationManager *manager;  @end 

步骤四:

viewDidLoad方法中,初始化定位管理者、设置代理、并开启定位功能

 - (void)viewDidLoad {     [super viewDidLoad];          //1.创建位置管理者     self.manager = [[CLLocationManager alloc] init];          //判断当前的系统版本号是否大于8.0     if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {         //若能进入If 说明当前系统是大于8.0          //向用户请求我们的程序使用位置         [self.manager requestAlwaysAuthorization];         [self.manager requestWhenInUseAuthorization];     }          //设置定位的更新距离(每移动10米更新一次,实质上是让代理方法重新走一次)     self.manager.distanceFilter = 10.0f;          //设置代理啊     self.manager.delegate = self;          //开启定位功能     [self.manager startUpdatingLocation]; } 

步骤五:

实现定位代理方法 

 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {     NSLog(@"locations = %@",locations);          //获得当前的卫星的位置     CLLocation *location = (CLLocation *)[locations lastObject];          //从位置信息中获取经纬度     double lat = location.coordinate.latitude;     double lon = location.coordinate.longitude;     NSLog(@"lat=====%f,lon+++++%f",lat,lon);          //使用位置 反编码 解析 位置信息     //创建位置反编码的对象     CLGeocoder *geocoder = [[CLGeocoder alloc] init];     //使用该对象获得位置信息     [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){         //遍历解析出来的位置信息         for (CLPlacemark *placemark in placemarks) {             NSLog(@"name = %@",placemark.locality);         }     }]; }  

得到打印的结果是

 2016-01-23 08:35:24.186 LocationDemo[798:258157] locations = (     "<+22.65055322,+114.04342625> +/- 65.00m (speed -1.00 mps / course -1.00) @ 16/1/23 /U4e2d/U56fd/U6807/U51c6/U65f6/U95f4 /U4e0a/U53488:35:24" ) 2016-01-23 08:35:24.187 LocationDemo[798:258157] lat=====22.650553,lon+++++114.043426 2016-01-23 08:35:25.117 LocationDemo[798:258157] name = 深圳市 

ps:反地理编码是通过经纬度得到地理位置信息

反地理编码的方法:

 CLGeocoder *geocoder = [[CLGeocoder alloc] init];     //使用该对象获得位置信息     [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){         //遍历解析出来的位置信息         for (CLPlacemark *placemark in placemarks) {             NSLog(@"name = %@",placemark.locality);         }     }]; 

地理编码是通过地理位置得到经纬度信息

地理编码的方法:

 [geocoder geocodeAddressString:@"深圳市" completionHandler:^(NSArray *placemarks, NSError *error) {         for (CLPlacemark *placemark in placemarks) {             NSLog(@"%@",placemark.location);         }     }]; 

通过触摸事件来停止更新定位

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {     //停止定位更新     [self.manager stopUpdatingLocation]; } 

当然定位功能还有很多,例如获取手机的朝向等等,这里就不一一列举了。

原文  http://www.cnblogs.com/dingjiwoniu-blogs/p/5152829.html
正文到此结束
Loading...