设为首页 加入收藏

TOP

地图篇-01.获取用户位置(一)
2017-10-13 10:32:55 】 浏览:9879
Tags:地图 -01. 获取 用户 位置

地图篇-01.获取用户位置

今天把地图整理了一下,共享出来和大家一起分享,希望帮助到不了解的朋友,当然很精通的朋友希望指正小生的不足.

1.说到地图,首先要接触一个framework -CoreLocation.framework

创建一个项目

点击"+"号之后,跳转到下个界面

导入完毕

2.原理:

  大家平时在使用iPhone时,每下载一个App,第一次打开的时候,都会有这样的提示

 

是吧,这时候我们如果选择了不允许的话,这个App是获取不了我们的位置的,相应的App里面涉及到位置的功能我们都用不了(比如微信和QQ的"附近的人")

所以每次我都被App的意志强奸,选择允许

那么,如果选择了不允许之后,又想选择允许怎么办呢?下图

可以到设置->隐私->定位服务里面去打开定位服务,所有的App,只要有定位功能的都会在这里面显示,还可以选择性打开自己想要打开的App定位

所以,在我们写代码的时候,第一步就要判断用户是否打开了定位服务.

接下来看下图

 

 

大家会从上图右侧看到,有的App是"使用期间",有的又是"始终",有的是"永不"

对,这是一个定位的状态,或者说模式,就是说你希望什么时候用这个App的定位服务,或者是不使用

点进去会看到如下图示

和下图

大家又会发现在以上两张图片中,微博比手机淘宝多了一个字段,这是为什么呢?

首先,在iOS8之后,获取用户位置需要在info.plist文件中添加字段,下图

常用字段:NSLocationAlwaysUsageDescription(始终)和NSLocationWhenInUseUsageDescription(使用期间),如果只添加一个,就会像上图那样有的只有使用期间,或者有的只有始终,亦或者有的App两者都有

所以,在判断用户打开定位服务之后,我们要判断用户的授权状态

3.在写代码之前,先来理理逻辑:

大家都知道在日常生活中,我们使用地图的时候,基本都是用经纬度来表示位置(要是不知道这个的话可以问问科学家),在iOS编码中也一样,也是用经纬度来表示用户位置,大家看到的地址名字不过是地理编码后显示的文本.

上述步骤完成之后,我们就可以开始定位了.

4.代码

 

 1 //
 2 //  ViewController.m
 3 //  地图
 4 //
 5 //  Created by admin on 16/5/21.
 6 //  Copyright © 2016年 邓驹. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 
11 //导入头文件(也可以创建一个pch文件,在pch文件中导入下面头文件)
12 #import <CoreLocation/CoreLocation.h>
13 
14 @interface ViewController ()<CLLocationManagerDelegate>
15 
16 @property (nonatomic, strong) CLLocationManager *manager;
17 
18 @end
19 
20 @implementation ViewController
21 
22 - (void)viewDidLoad {
23     [super viewDidLoad];
24     //1.判断用户是否开启定位服务
25     if (![CLLocationManager locationServicesEnabled]) {
26         NSLog(@"请开启定位服务");
27         return;
28     }
29     //2.判断用户授权状态
30     if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
31         //请求用户授权
32         //后台可以定位
33 //        [self.manager requestAlwaysAuthorization];
34         //允许在前台使用GPS描述,后台不能定位
35         [self.manager requestWhenInUseAuthorization];
36     }
37     //3.开始定位
38     [self.manager startUpdatingLocation];
39 }
40 
41 -(CLLocationManager *)manager {
42     if (!_manager) {
43         _manager = [[CLLocationManager alloc] init];
44         //定位精度(误差)
45         _manager.desiredAccuracy = kCLLocationAccuracyBest;
46         //位置更新的最小距离(如果不设置这个属性,程序会一直获取用户当前位置,是非常耗电的)
47         _manager.distanceFilter = 100;
48         _manager.delegate = self;
49     }
50     return _manager;
51 }
52 
53 /**
54  *  当获取到用户位置的时候调用
55  *
56  *  @param manager   当前manager
57  *  @param locations 用户的位置
58  */
59 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
60     //获取用户的最新位置
61     CLLocation *userLocal = [locations lastObject];
62     //停止定位
63     [self.manager stopUpdatingHeading];
64     //通过经纬度来获取用户位置
65     //纬度
66     CLLocationDegrees latitude = userLocal.coordinate.latitude;
67     //经度
68     CLLocationDegrees longtitude = userLocal.coordinate.longitude;
69     NSLog(@"纬度:%f,经度:%f",latitude,longtitude);
70 }
71 
72 - (void)didReceiveMemoryWarning {
73     [super didReceiveMemoryWarning];
74     // Dispose of any resources that can be recreated.
75 }
76 
77 @end

打印结果:

1 2016-05-21 19:40:37.242 地图[2172:76214] 纬度:37.785834,经度:-122.406417

东经为正数,西经为负数

取值范围:-180~180

北纬为正数,南纬为负数

取值范

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【原】iOS多线程之NSThread、NSOp.. 下一篇【原】iOS学习之SQLite和CoreData..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目