iOS开发之CoreLocation(GPS定位)

1、概述

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

(1)Map Kit :用于地图展示

(2)Core Location :用于地理定位

2个热门专业术语:

LBS :Location Based Service

SoLoMo :Social Local Mobile(索罗门)

2CoreLocation框架的使用

CoreLocation框架使用前提:

导入框架:

导入主头文件:

#import <CoreLocation/CoreLocation.h>

CoreLocation框架使用须知:

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

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

3CLLocationManager

CLLocationManager的常用操作:

(1)开始用户定位

- (void)startUpdatingLocation;

(2)停止用户定位

- (void) stopUpdatingLocation;

 

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

- (void)locationManager:(CLLocationManager *)manager

didUpdateLocations:(NSArray *)locations;

locations参数里面装着CLLocation对象。

例如,取出位置对象:

CLLocation *loc = [locations firstObject];

打印经纬度:

NSLog(@"didUpdateLocations------%f %f", coordinate.latitude, coordinate.longitude);

使用前记得设置代理:

// 创建定位管理者

self.locMgr = [[CLLocationManager alloc] init];

// 设置代理

self.locMgr.delegate = self;

4CLLocation

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个位置之间的距离

例如:

计算2个经纬度之间的直线距离

?


1

2

3

4

CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:40 longitude:116];

CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:41 longitude:116];

CLLocationDistance distance = [loc1 distanceFromLocation:loc2];

NSLog(@"距离为%f", distance);

5CLLocationManager

@property(assign, nonatomic) CLLocationDistance distanceFilter;

每隔多少米定位一次

 

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

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

6CLLocationCoordinate2D

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

?


1

2

3

4

typedef struct {

        CLLocationDegrees latitude; // 纬度

        CLLocationDegrees longitude; // 经度

} CLLocationCoordinate2D;

一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D。

7、用户隐私的保护

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

一旦用户选择了“Don’t Allow”,意味着你的应用以后就无法使用定位功能。为了严谨起见,最好在使用定位功能之前判断当前应用的定位功能是否可用。

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

+ (BOOL)locationServicesEnabled;

8CLGeocoder

使用CLGeocoder可以完成“地理编码”和“反地理编码”:

地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)。

反地理编码:根据给定的经纬度,获得具体的位置信息。

地理编码方法:

- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;

反地理编码方法:

- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

9CLGeocodeCompletionHandler

当地理\反地理编码完成时,就会调用CLGeocodeCompletionHandler:

typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);

这个block传递2个参数:

error :当编码出错时(比如编码不出具体的信息)有值

placemarks :里面装着CLPlacemark对象

10CLPlacemark

CLPlacemark的字面意思是地标,封装详细的地址位置信息。

@property (nonatomic, readonly) CLLocation *location;

地理位置

 

@property (nonatomic, readonly) CLRegion *region;

区域

 

@property (nonatomic, readonly) NSDictionary *addressDictionary;

详细的地址信息

 

@property (nonatomic, readonly) NSString *name;

地址名称

 

@property (nonatomic, readonly) NSString *locality;

城市

时间: 2024-10-31 12:49:24

iOS开发之CoreLocation(GPS定位)的相关文章

ios-大神留步!!!iOS能不能关闭GPS定位而只开启其他的定位功能?

问题描述 大神留步!!!iOS能不能关闭GPS定位而只开启其他的定位功能? 在开发过程中想要测试下,如果不开启GPS定位功能,用其他定位服务是否也能实现定位功能. 但是手机测是时候如果关闭定位服务的话,就把所有的定位功能都关闭了.有没有一种方法关闭GPS而只检测WiFi定位之类的办法,还是应该在代码中添加什么关闭GPS定位服务的代码吗??? 解决方案 iOS中GPS定位 解决方案二: 明确告诉你,你没有大量的地理信息,所以绝对不可以,你可以提示用户

iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码_IOS

废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableViewCell.h" #define kDeviceWidth [UIScreen mainScreen].bounds.size.width #define kDeviceHeight [UIScreen mainScreen].bounds.

iOS开发之UIKeyboardTypeNumberPad数字键盘自定义按键_IOS

最近做一个搜索用户的功能,这里使用了UISearchBar.由于搜索的方式只有手机号码,所以这里的键盘要限制为数字输入,可以这么做: self.searchBar.keyboardType = UIKeyboardTypeNumberPad;如果使用的不是搜索框而是textField输入框,可以设置textField的键盘属性来展示 self.textField.keyboardType = UIKeyboardTypeNumberPad;监听事件如下所示即可. 但是这里有个问题,就是数字键盘上

ios开发之Swift - 点击状态栏使tableView返回顶部(附:状态栏点击事件响应)

1,当页面上只有一个scrollView,点击状态栏scrollView会自动滚动到顶部   比如页面上只有一个表格(UITableView),当点击顶部状态条后,表格会像QQ.微信联系人列表那样回到最上面.   这个是iOS系统默认就有的.   开发之Swift - 点击状态栏使tableView返回顶部(附:状态栏点击事件响应)-swift ios开发教程"> 2,当页面上有多个scrollView,点击状态栏时,视图都不会滚动 这时我们需要把不需要滚动的 scrollView 的 s

ios开发之Swift使用AirPrint进行打印

使用 AirPrint 可以轻松地从 iOS 和 OS X app 中传输无损照片和文稿打印.当然,打印机也要支持AirPrint 技术才行.下面通过样例演示如何在App中使用 Airprint进行打印.    1,打印机模拟器(Printer Simulator)下载 如果没有支持AirPrint的打印机也没关系,苹果提供了个虚拟打印机,地址:https://developer.apple.com/downloads (1)下载里面的 Hardware IO Tools 开发之Swift使用A

ios开发之Swift自动优化照片调整善图像质量

Core Image能通过分析图片的各个属性,人脸的区域等进行自动优化图片.我们只需要调用autoAdjustmentFiltersWithOptions这个API方法获取各个自动增强滤镜来优化图片即可.不管是人物照片还是风景照均可增强效果. (以前另外还有个叫autoAdjustmentFilters的方法,现已废除.)   1,具体使用的滤镜如下: (1)CIRedEyeCorrection:修复因相机的闪光灯导致的各种红眼 (2)CIFaceBalance:调整肤色 (3)CIVibran

ios开发之Swift闭包使用示例

什么是闭包? 闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量). "闭包" 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域). 在Swift中,Swift的闭包跟OC中的Block很像,OC中的Block类似于匿名函数,闭包用来定义函数. 无论是OC中的Block还是Swift中的闭

ios开发之Swfit使用自定义的UIRefreshControl下拉刷新界面

默认 UIRefreshControl 下拉刷新界面是一个菊花进度条+一段描述文字,略显单调.其实我们可以使用自己创建的界面视图,方便我们实现各种效果.比如添加个动态图片,添加个动画效果什么的.   1,下面演示如何使用自定义的下拉刷新界面,效果图如下:   (1)随着下拉,界面透明度从0开始慢慢显示出来     开发之Swfit使用自定义的UIRefreshControl下拉刷新界面-uirefreshcontrol下拉">         (2)开始刷新时,文字会有跑马灯效果(字体逐个

ios开发之Swift UIPasteboard剪贴板的使用详解(复制、粘贴文字和图片)

UITextField.UITextView组件系统原生就支持文字的复制,但有时我们需要让其他的一些组件也能实现复制功能,比如点击复制UILabel上的文字.UIImageView中的图片.UITableView里单元格的内容.或者点击按钮把文字或图片自动复制到粘贴板中等等. 这些我们借助 UIPasteboard 就可以实现. 一,将内容写入到剪贴板中 1,复制字符串 UIPasteboard.generalPasteboard().string = "欢迎访问 hangge.com"