IOS 支持三种检测当前位置的方式:手机基站、Wi-Fi、和GPS,其中GPS是经度最高的,同时也是最耗费手机电量的。一般情况下在室内是无法通过GPS获 取位置信息的,通过Wi-Fi获取位置的原理是通过网络提供商的IP地址信息来获取位置,经度不是很高,最后是通过手机基站获取位置,手机开机后会连接附 近的基站塔获取信号,通过基站可以得到手机所在的位置信息,基站越密集,所获取的位置信息经度就越高。

IOS SDK提供的Core Location能比较好的提供获取位置信息的功能,获取位置信息涉及如下几个类,CLLocationManager(位置管理器), CLLocation, CLLocationManagerdelegate(协议、提供委托方法),CLLocationCoodinate2D(存储坐标位置)

另外CLLocationManager还有几个属性;

desiredAccuracy:位置的精度属性

取值有如下几种:

kCLLocationAccuracyBest

精确度最佳

kCLLocationAccuracynearestTenMeters

精确度10m以内

kCLLocationAccuracyHundredMeters

精确度100m以内

kCLLocationAccuracyKilometer

精确度1000m以内

kCLLocationAccuracyThreeKilometers

精确度3000m以内

distanceFilter:横向移动多少距离后更新位置信息

delegate:响应CLLocationManagerdelegate的对象

下面来构建一个获取位置的例子:

首先建立一个Single View Application工程,然后引入CoreLocation.framework,并在ViewController.h中修改如下:


#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController<CLLocationManagerDelegate> {     CLLocationManager *locManager; }
@property (retain, nonatomic) IBOutletUILabel *lonLabel; @property (retain, nonatomic) IBOutletUILabel *latLabel; @property (retain, nonatomic) CLLocationManager *locManager;
@end
.m文件的实现如下,具体解释在代码注释中说明

#import "ViewController.h"
@interfaceViewController ()
@end
@implementation ViewController @synthesize lonLabel; @synthesize latLabel; @synthesize locManager;
- (void)viewDidLoad {     [superviewDidLoad];          //初始化位置管理器     locManager = [[CLLocationManager alloc]init];     //设置代理     locManager.delegate = self;     //设置位置经度     locManager.desiredAccuracy = kCLLocationAccuracyBest;     //设置每隔100米更新位置     locManager.distanceFilter = 100;     //开始定位服务     [locManagerstartUpdatingLocation]; }
- (void)viewDidUnload {     [selfsetLonLabel:nil];     [selfsetLatLabel:nil];     [superviewDidUnload];     // Release any retained subviews of the main view. }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }
- (void)dealloc {     //停止定位服务     [locManagerstopUpdatingLocation];     [lonLabelrelease];     [latLabelrelease];     [superdealloc]; }
//协议中的方法,作用是每当位置发生更新时会调用的委托方法 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {     //结构体,存储位置坐标     CLLocationCoordinate2D loc = [newLocation coordinate];     float longitude = loc.longitude;     float latitude = loc.latitude;     self.lonLabel.text = [NSStringstringWithFormat:@"%f",longitude];     self.latLabel.text = [NSStringstringWithFormat:@"%f",latitude];      }
//当位置获取或更新失败会调用的方法 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {     NSString *errorMsg = nil;     if ([error code] == kCLErrorDenied) {         errorMsg = @"访问被拒绝";     }     if ([error code] == kCLErrorLocationUnknown) {         errorMsg = @"获取位置信息失败";     }          UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"Location"                                                     message:errorMsg delegate:self cancelButtonTitle:@"Ok"otherButtonTitles:nil, nil];     [alertView show];     [alertView release]; }
@end
最后编译并运行结果如下(在模拟器上得到的经纬度):

IOS开发之Core Location的更多相关文章

  1. iOS开发之Core Animation

    在IOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了. 在Core Animation中我们经常使用的是 CABasi ...

  2. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  3. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  4. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  5. iOS开发之UIImage等比缩放

    iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...

  6. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  7. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  8. iOS开发之info.pist文件和.pch文件

    iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...

  9. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

随机推荐

  1. linux 之 汇编语言 的mov和movl sub 和subl add 和addl 的区别??

    AT&T汇编语言(Assembly Language)是UNIX下惯用的汇编语言(Assembly Language)各式 l,w,b是ATT汇编语言(Assembly Language)中用 ...

  2. django csrf_protect及浏览器同源策略

    1.django在检测post行为时会有诸多的限制. 为了防止跨域请求伪造安全 参考:http://www.qttc.net/201209211.html   https://www.cnblogs. ...

  3. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (二)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 16 图像平滑 目标 • 学习使用不同的低通滤波器对图像进行模糊 • 使用自定义的滤波器对图像进行卷积(2D 卷 ...

  4. hdu 3466 Proud Merchants 【限制性01背包】+【贪心】

    题目链接:https://vjudge.net/contest/103424#problem/J 转载于:https://www.bbsmax.com/A/RnJW16GRdq/ 题目大意: 有n个商 ...

  5. 【猿分享第10期】微信小程序Meetup扫盲专场回顾(转载)

    首先感谢答疑师:子慕 前端工程师,目前就职于医联,偶尔写点博客,吐槽总结,偶尔吟“湿”作对,润滑万物,江湖人称子慕大诗人. 直播间语音回放收听,请微信扫描下图二维码授权进入即可. 以下为本次直播的全部 ...

  6. Java动态追踪技术探究

    引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧.” “线上机器,没开Debug端口.” “看日 ...

  7. react输入 撤销

    销毁阶段可以使用的函数:componentWillUnmount:在删除组件之前进行清理操作,比如计时器和事件监听器.因为这些函数都是开发者手动加上去的,react不知道,必须进行手动清理. 实例第一 ...

  8. POJ 3243 Clever Y 扩展BSGS

    http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...

  9. error MSB3073 解决办法

    发现拷贝命令编译错误,查看输出列表发现时无法找到相应的路径. 1.顺着这个思路第一个想到的是中文路径的问题,先修改了盘符的中文名称,发现还是无法解决具体的问题. 2.后来反复查阅网上的资料,发现帮助并 ...

  10. Django源代码中model字段

    to_field='绑定的主键字段(默认为ID)' limit_choices_to = {'过滤的choices字段':choices的ID} related_name = 关联表反向查找自己的名称 ...