苹果在中国的地图服务商是高德

1:定位使用的生活场景

在移动互联网时代,移动app能解决用户的很多生活琐事,比如导航:去任意陌生的地方

周边:找餐馆、找酒店、找银行、找电影院

在上述应用中,都用到了地图和定位功能

 

2:iOS定位依赖的框架

在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发

Map Kit :用于地图展示(比较重量级)

Core Location :用于地理定位

Map Kit的定位是基于Core Location的

 

iOS定位热门术语:

LBS :Location Based Service

SoLoMo :Social Local Mobile(索罗门)

 

3:CoreLocation框架使用

CoreLocation框架使用前提

导入框架

导入主头文件

#import <CoreLocation/CoreLocation.h>

CoreLocation框架使用须知:

CoreLocation框架中所有数据类型的前缀都是CL

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

 

4:CLLocationManager的常用操作

开始用户定位

- (void)startUpdatingLocation;

 

停止用户定位

- (void) stopUpdatingLocation;

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

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

locations参数里面装着CLLocation对象

 

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

@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

经纬度

 

@property(readonly, nonatomic) CLLocationDistance altitude;

海拔

 

@property(readonly, nonatomic) CLLocationDirection course;

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

 

@property(readonly, nonatomic) CLLocationSpeed speed;

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

 

用- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location方法可以计算2个位置之间的距离

 

@property(assign, nonatomic) CLLocationDistance distanceFilter;

每隔多少米定位一次

 

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

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

 

CLLocationCoordinate2D是一个用来表示经纬度的结构体,定义如下

typedef struct {

        CLLocationDegrees latitude; // 纬度

        CLLocationDegrees longitude; // 经度

} CLLocationCoordinate2D;

一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D

 

5:用户隐私的保护

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

要想获得用户的位置

想访问用户的通讯录、日历、相机、相册等等

当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权

ios图片定位打码 苹果手机照片定位地图_用户隐私

 

5.1

开发者可以在后缀名为Info.plist的文件中

设置NSLocationUsageDescription说明定位的目的(Privacy - Location Usage Description)

ios图片定位打码 苹果手机照片定位地图_框架使用_02

一旦用户选择了“Don’t Allow”,意味着你的应用以后就无法使用定位功能

为了严谨起见,最好在使用定位功能之前判断当前应用的定位功能是否可用

CLLocationManager有个类方法可以判断当前应用的定位功能是否可用

+ (BOOL)locationServicesEnabled;