LBS(定位)的使用

一、LBS(定位)的使用 

1、使用框架Core Location 

 

2、CLLocationManager

(1)CoreLocation中使用CLLocationManager对象来做用户定位

(2)CLLocationManager的常用操作

   <1>开始用户定位

  - (void)startUpdatingLocation;

 

  <2>停止用户定位

  - (void) stopUpdatingLocation;

 

  <3>当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法

  - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;

  locations参数里面装着CLLocation对象

 

  <4> 判断当前定位是否可用,最好在使用前判断

  +locationServicesEnabled

 

(3)定位的精确度

   <1>@property(assign, nonatomic) CLLocationDistance distanceFilter;

  每隔多少米定位一次

 

  <2>@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

  定位精确度(越精确就越耗电)

 

 

3、CLLocation

 

(1)CLLocation对象用来表示某个位置的地理信息,比如经纬度、海拔等等

 

(2)经纬度

  @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

 

(3)海拔

  @property(readonly, nonatomic) CLLocationDistance altitude;

 

(4)路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表真北方向)

  @property(readonly, nonatomic) CLLocationDirection course;

 

(5)行走速度(单位是m/s)

  @property(readonly, nonatomic) CLLocationSpeed speed;

 

(6)计算两个位置间的距离

  - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

 

 

 

4、CLLocationCoordinate2D

 

(1)CLLocationCoordinate2D是一个用来表示经纬度的结构体

 

(2)定义如下:

   typedef struct {

          CLLocationDegrees latitude; // 纬度

          CLLocationDegrees longitude; // 经度

  } CLLocationCoordinate2D;

 

(3)一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D

 

 

5、关于用户隐私

 

(1)从iOS 6开始,苹果在保护用户隐私方面做了很大的加强,很多操作都必须经过用户批准授权:

    <1>获得用户的位置  

  <2>访问用户的通讯录

  <3>日历

  <4>相机

  <5>相册

  <6>等等

 

(2)如何设置用户隐私

    <1>开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的(Privacy - Location Usage Description)

    <2>  总是使用用户位置:NSLocationAlwaysUsageDescription

     使用应用时定位:NSLocationWhenInUseDescription  

  

 

  <3> 不设置该字段,定位不能使用(至少设置其中之一,两个都设置,NSLocationAlwaysUsageDescription生效)

 

 

6、示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
 
@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic, strong) CLLocationManager *manager;
@end
@implementation ViewController
 
- (CLLocationManager *)manager
{
    if (!_manager) {
         
    //1.创建一个定位管理器
        _manager =  [[CLLocationManager alloc]init];
    }
    
    return _manager;
}
 
- (void)viewDidLoad {
    [super viewDidLoad];
    
     
    //2.获取用户的授权
    [self.manager requestAlwaysAuthorization];
     
    //3.开始定位
    [self.manager startUpdatingLocation];
     
    //4.设置代理
    self.manager.delegate = self;
     
    //设置属性
    /*
     //导航专用的精确度
     extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
     extern const CLLocationAccuracy kCLLocationAccuracyBest;
     extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
     extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
     extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
     extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
    */
    //定位精确度
    self.manager.desiredAccuracy =  kCLLocationAccuracyBestForNavigation;
     
     
     
     
    //使用场景
    //求距离
     
    CLLocation *loc1 = [[CLLocation alloc]initWithLatitude:40 longitude:116];
     
    CLLocation *loc2 = [[CLLocation alloc]initWithLatitude:41 longitude:116];
     
    CLLocationDistance dis =  [loc1 distanceFromLocation:loc2];
    NSLog(@"%f",dis);
     
}
 
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
     
    //1.获取用户的位置
    CLLocation *location = [locations firstObject];
     
    CLLocationCoordinate2D coordinate =  location.coordinate;
     
    NSLog(@"%f ---- %f",coordinate.latitude,coordinate.longitude);
     
    NSLog(@"locations");
}
 
 
@end

 

posted @   执着的怪味豆  阅读(1363)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示