定位服务 CLLocationManager 的简单用法

来源:互联网 发布:java关键字 false 编辑:程序博客网 时间:2024/06/05 11:23

定位服务 CLLocationManager 的简单用法

## 一、在开始写这个博客之前(下面先介绍完再写代码),我首先从“万物皆对象”的角度 和 用户的角度来 描述一下个人理解的面向对象编程思想,并且用它来写一下**定位服务**1、有一次我到一个陌生的城市去找一个朋友,问了好多出租车司机都不知道这个地方,(流量用完了)最后我决定按照他我给的地址找他的住处,问了好几个人终于得到了点信息,这个地址好像在某个街一个烧烤店旁边,但是找了好久还是没找到,但却闻到一股肉的香味(肯定是饿了),就在这里我恍然大悟,既然是烧烤,应该还有其它属性(不仅仅是香吧),烧烤店附近应该有插肉的木签吧,有装过烧烤的塑料袋吧,于是我决定循着这几个线索去找,但是找了好几分钟还是一无所获,就在我想其它办法时,我看见一个人装着一大桶鱼往一个小巷子里走去,?????如果把烧烤和 鱼联系起来,是啊,跟着他...,那人果然是前往那家烧烤店的。**说到这里终于到正题了**,当你在了解某个东西的时候肯定会知道一些这个东西的特征,比如你买了一个水杯,你肯定知道它能喝水,但还有其它用处吗?比如 砸核桃、拔火罐、装其它饮料...,你要是再逆天一点,你还可以用玻璃瓶来做地雷呢!所以这些都是它本身具备的属性,只是平常没有考虑那么多罢了,一个正常的人有手有脚,这是人的属性,有了这个属性它就能跑、能跳、能做事,当然这是**外在的属性**,比如还有内在的属性,乐观,积极向上,诚实...这些是**内在的属性**,和人相处的时候需要观察、互相学习、才知道并不是显而易见的,而当你了解到这个人的这些优点之后,你就会知道这个人人员很好,(乐观开朗的人,对人好的人,有钱人,忠诚义气的人) 属于它的属性,所以他们能有更多的方法找人干更多的事,是不是意味着它们代理方法就多呢?所以从属性看出了很多有关这个人的信息,接下来你是不是想和他成为朋友了呢?写了这么多终于引出了 个人理解的“面向对象”编程的思想,当你在编程的时候你遇到了从未遇到过的新东西,你就应该从这个对象的属性入手,把他的大部分属性搞清楚,然后你就知道它的 人员好不好了,最后你就可以针对它使用什么方法了,**下面开始讲解代码了**二、比如,现在我要查询地理信息吧,首先我要干什么呢?三、既然我要查询地理位置吧,那【1、我得打开有关的地理位置服务软件吧】, 打开这个软件的时候不知道是不是为了隐私,这个软件要判断你【2、是否打开了手机的定位服务】,如果开启了就往下走如果没有开启就去开启,开启了就继续往下走,对于你来说你就好像是在问某个人,这里的位置,首先得有服务的这个人,【3、那就创建(初始化)这个人】,这个人得会说话吧(就是会通过一种信号向你传递信息,就算不会说,那眼睛看,耳朵听,鼻子闻,身体感受,都相当于交流)【4、这个“人”说:允许你使用它定位】,而“它”能说出你现在的精准位置,就像人一样它也许本来不熟悉这个地方,但是在这里时间长了它对这里的环境逐渐熟悉了,也就知道了这里周围有些什么东西,【5、他能准确的知道哪里是哪里】这是后来学习后(熟悉后)知道的,学习的可以理解是外来的,比如(extern const :CLLocationAccuracy kCLLocationAccuracyBest;)这个extern const 就可以理解为学习来的,能得到精准度 ##开始定位时需要注意的事项:1、导入框架
 #import <CoreLocation/CoreLocation.h>
2、在info.plist 里面添加NSLocationWhenInUseUsageDescription 或者 NSLocationAlwaysUsageDescription 目的是让用户获取授权,后面的Value项写上需要定位的原因3、判断用户是否打开了定位服务
BOOL isOpen = [CLLocationManager locationServicesEnabled];    if (!isOpen) {        UIAlertView *alterView = [[UIAlertView alloc]initWithTitle:nil message:@"请在设置里打开定位服务" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];        [alterView show];        return;    }
4、当定位的程序写完后,运行模拟器如果定位不成功(控制台没显示)那就 重置模拟器,或者 重新定位城市5、下面是定位的时候具体的几个类和他们的常用属性以及重要方法
CLLocationManager *manager = [[CLLocationManager alloc]init];初始化定位服务**(1)、CLLocationManager:里面拥有的**    [manager requestWhenInUseAuthorization]; 当使用的时候,用户允许咱们使用定位    manager.pausesLocationUpdatesAutomatically = YES;  让系统帮助管理定位开关    manager.desiredAccuracy = kCLLocationAccuracyBest;  设置精准度    @property(assign, nonatomic) CLLocationDistance distanceFilter;    manager.distanceFilter = 500;  多少米更新一次    manager.delegate = self;这个更新是通过代理来提示我们,当获取到位置或者更新位置的时候,会调用代理方法    [manager startUpdatingLocation];   开启定位    [manager stopUpdatingLocation];   关闭定位这是定位成功的方法    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{    **(2)、CLLocation:里面拥有的**     CLLocation *location = [locations lastObject];  获取最新位置    CLLocationCoordinate2D curCoordinated2D = location.coordinate;获得当前的经度NSLog(@"精度:%f  纬度%f",curCoordinated2D.longitude,curCoordinated2D.latitude);    NSDate *updateTime = location.timestamp; 通过location 更新位置的时间    NSLog(@“%@",updateTime);    double speed = location.speed;     NSLog(@"当前行驶的速度:%f",speed);    还有很多类似的属性及其方法,大家可以自己点(com+鼠标左键)进去看看}
0 0