关于iphone定位的基本知识

每一个CLLocation对象都有一个叫verticalAccuracy的属性来判断精确度。海拔数值可能会有verticalAccuracy大小的误差,当verticalAccuracy为负值时,那是Core Location在通知你不能获取海拔高度。  

1.Getting theUser’s Current Location

  获取用户当前位置。

  获取位置的方式有三种:GPS, cell towertriangulation(蜂窝站点), 和 Wi-FiPositioning Service (WPS).其中GPS是最精确的定位方式,但是在第一代iphone上没有。GPS是通过读取很多卫星微波信号来确定当前位置的。蜂窝站点通过 iphone周围的站点计算出来的,在蜂窝站点密集的地方使用这种技术可以达到一个准确的值,比如在城市但在蜂窝站点不密集的地方效果就没那么好了。最后一个WPS使用的是连接到Wi-Fi网络的IP地址来确定位置,这将会有较大的误差。这三种方式都会消耗大量的电。怎么才能即实现定位功能又省电呢?下面的方法就可以解决:当使用Core Location时,可以选择精确度,谨慎的选择你所需要的准确度,可以帮助你省很多电。Core Location使用的技术隐藏在应用程序中。我们无需选择使用GPS、蜂窝站点技术还是WPS,我们只要告诉它我们需要的准确度它会自己决定选什么技术 来满足我们的需求。

2.The Location Manager

Core Location的接口是很容易使用的。主要用到的类是CLLocationManager,就是通常说的Location Manager。为了使用Core Location我们需要创建Location Manager的实体:

CLLocationManager *locationManager =[[CLLocationManager alloc] init];

  这样我们就创建了 Location Manager的实体,但是我们还没有开始定位。我们需要指派一个代理给Location Manager。当定位信息改变时Location Manager将调用代理方法。定位的过程会花一段时间平均几秒钟。代理方法必须遵循CLLocationManagerDelegate协议。

3.Setting the Desired Accuracy

  设置代理后,你还要设置需要的准确度。就像我们刚刚说的精确度越高越耗电。如果你只是要是应用程序确定是哪个国家或是哪个州那么就不要设置很高的精确度。记住一点有时候你并不能得到你需要的精确度。

  下面说一个设置代理和设置精确度的例子:

locationManager.delegate = self;

locationManager.desiredAccuracy =kCLLocationAccuracyBest;

  精确度使用的是一个double类型的常量。单位是米,所以如果你设置desiredAccuracy=10那么精确度就是10米,这就告诉 Location Manager尽可能达到10米的精确度。还可以设置为其他常量:

[cpp]

extern const CLLocationAccuracykCLLocationAccuracyBestForNavigation ;

extern const CLLocationAccuracykCLLocationAccuracyBest;

extern const CLLocationAccuracykCLLocationAccuracyNearestTenMeters;

extern const CLLocationAccuracykCLLocationAccuracyHundredMeters;

extern const CLLocationAccuracykCLLocationAccuracyKilometer;

extern const CLLocationAccuracykCLLocationAccuracyThreeKilometers;4.Setting the Distance Filter

4.Setting the Distance Filter

  默认情况是这样的,每当位置改变时Location Manager就调用一次代理。

  通过设置distance filter可以实现当位置改变超出一定范围时Location Manager才调用相应的代理方法。这样可以达到省电的目的。

  例如:locationManager.distanceFilter =1000.0f;

  如果设置默认值:

locationManager.distanceFilter =kCLDistanceFilterNone;

5.Starting the Location Manager

  开始定位

  当你转备好为定位消耗电池时我们可以调用

[locationManagerstartUpdatingLocation];

  来告诉 Location Manager开始定位

6.Using the Location Manager Wisely

  如果你只需要确定当前位置而不需要进一步定位,当LocationManager查询到当前位置时需要通知代理停止定位。

  停止方法: [locationManagerstopUpdatingLocation];

7.The Location Manager Delegate

Location Manager必须遵守CLLocationManagerDelegate协议,CLLocationManagerDelegate协议定义了两个方法,并且这两个方法都是可选的。其中一个方法是当确定当前位置或是位置信息改变时调用。另一个方法是当遇到错误信息时调用

8.Getting Location Updates

  当Location Manager想通知它的代理当前位置时,它会调用

locationManager:didUpdateToLocation:fromLocation:方法。

  这个方法有3个参数第一个参数LocationManager。第二个参数是一个CLLocation对象用来确定当前位置,第三个是CLLocation 对象用来确定最近一次更新的位置。该方法调用时,先前的location对象会被置空。

9.Getting Latitude and Longitude UsingCLLocation

  经纬度

  位置信息是通过使用CLLocation类的实例从Location Manager那里得到的。这个类有5各属性。latitude和longitude被封装在coordinate属性中。

  获取方式如下:

CLLocationDegrees latitude =theLocation.coordinate.latitude;

CLLocationDegrees longitude =theLocation.coordinate.longitude;

CLLocation对象还可以告诉你精确度。

horizontalAccuracy属性描述调整的中心点。horizontalAccuracy值越大越不精确。

CLLocation 还有一个叫altitude的属性用来表示海拔

CLLocationDistance altitude =theLocation.altitude;

  每一个CLLocation对象都有一个叫verticalAccuracy的属性来判断精确度。海拔数值可能会有verticalAccuracy大小的误差,当verticalAccuracy为负值时,那是Core Location在通知你不能获取海拔高度。

CLLocation的另一个属性timestamp用来告诉Location Manager是什么时候定位的。CLLocation还有一个实例方法来告诉你的两个CLLocation对象之间的距离。这个方法叫:getDistanceFrom:

  它是这样工作的:

CLLocationDistance distance =[fromLocation getDistanceFrom:toLocation];

  返回两个时间段内的距离,有时候它是不考虑海拔的,所以要自己计算距离。

10.Error Notifications

  如果Core Location不能指定你当前的位置,它将调用CLLocation的第二个代理方法:locationManager:didFailWithError:,最常见的是用户取消使用定位信息。

时间: 2024-08-03 11:34:17

关于iphone定位的基本知识的相关文章

省电的iPhone定位

1.Getting the User’s Current Location 获取用户当前位置. 获取位置的方式有三种:GPS, cell tower triangulation(蜂窝站点), 和 Wi-Fi Positioning Service (WPS).其中GPS是最精确的定位方式,但是在第一代iphone上没有.GPS是通过读取很多卫星微波信号来确定当前位置的.蜂窝站点通过 iphone周围的站点计算出来的,在蜂窝站点密集的地方使用这种技术可以达到一个准确的值,比如在城市但在蜂窝站点不密

技术人,为什么需要构建知识图谱

这个时代,信息极大丰富,人每时每刻都被各种各样的知识.信息轰炸着.如何有效的选择对自己有价值的知识,如何构建一个独属于自己的知识体系并让它为自己创造价值,变得越来越重要.只有知识经过了你的选择和应用,内化为自己的隐性经验,纳入到你的知识体系中,才能真正地为你创造财富. 怎样才能建立自己的知识体系呢? 选择方向,设定目标 学习.实践.输出.内化 同主题扩散 运用工具整理记录知识图谱 迭代与更新知识图谱 有目标,才有知识体系 如果只能选择一个方向,你希望在什么方向上做到出类拔萃? 对这个问题的思考,

【Android架构篇】之定位数据如何从GPS芯片到应用层(一)

Android:V4.2.2 Source Insight 写在前面 在漫长的Android源码编译等待过程中,想起之前写过一部分的Android定位实现的探究小品,于是继续探究. 注:代码都是片段化的代码,用来提纲挈领的说明问题. 定位的基础知识: 1.定位芯片和CPU之间通过串口进行通信 2.串口和CPU之间传输的是ASCII格式的NMEA(National Marine Electronics Association)信息,如: $GPGGA,092204.999,4250.5589,S,

移动定位服务将引领手机新革命(转来的)

多年以来,人们打电话的时候都会问对方:“现在能听到我说话吗?”不久之后,人们的问题就会变成:“现在能找到我吗?”. 过去几年来,手机领域正在悄悄发生着一场变革,也就是所谓的“移动定位服务(location-based services)”,业内人士将其称作是LBS.新一代智能手机能够利用全球定位系统(GPS)或无线网络来精准定位用户的位置,而这也催生了一股创新浪潮. 移动定位服务的爆炸式增长是多种趋势共同作用的结果.首先,智能手机,尤其是iPhone的快速普及,成为这一领域最为引人注目的趋势.其

构建知识图谱,让自己更值钱

现在这个时代,信息极大丰富,知识浩如烟海,每个人每时每刻都被各种各样的知识.信息轰炸着,如何有效的选择对自己有价值的知识,如何构建一个独属于自己的知识体系并让它为自己创造价值,变得越来越重要. 泛泛地讲,知识就是财富,信息就是财富,具体到个体身上,只有知识经过了你的选择和应用,内化为自己的隐性经验,纳入到你的知识体系中,才能真正地为你创造财富. 那么,怎样才能建立自己的知识体系呢? 构建个人知识系统的一般要经历下面这些过程: 选择方向,设定目标 学习.实践.输出.内化 同主题扩散 运用工具整理记

牛腩新闻发布系统——盒子的浮动与定位

浮动和定位的相关知识,是设计精美网页的必要前提之一.在学习浮动与定位之前,我们先了解一下相关知识"标准流". 一.标准流 标准流,是指在不适用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则.在标准流中,块级元素的盒子都是上下排列,行内元素的盒子都是左右排列的.我们把这些元素分为以下两类: 块级元素(block level):占据着整个矩形区域,以块的形式表现出来,并且跟统计的兄弟块依次竖直排列,左右撑满.如<li>.<ul>.<div>

详解Android定位

相信很多的朋友都有在APP中实现定位的需求,今天我就再次超炒冷饭,为大家献上国内开发者常用到的三种定位方式.它们分别为GPS,百度和高德,惯例先简单介绍下定位的背景知识. 什么是GPS定位.基站定位和Wi-Fi定位? 1.GPS定位:根据设备GPS芯片和GPS卫星实现定位,GPS定位在室内是不可以使用的.GPS定位精度和芯片本身以及实际使用环境有关,一般情况下,GPS定位精度在10m左右. 2.基站定位:根据设备获取的基站信息实现定位,基站定位精度一般不受使用环境影响,主要和基站的覆盖半径有关.

iOS ---不一样的NSLog打印(定位打印)

在iOS开发过程中,调试是很重要的过程,而除了各种断点调试(普通断点.条件断点.全局断点)之外,似乎NSLog是我们调试最常用的方法,当然,也是最简单朴素的寻debug方法. 在项目中,我们常使用的NSLog的语句无外乎以下一种: NSLog(@"打印字符串:%@",name);   NSLog(@"打印整形:%i",number);//或者 %li ; %ld ; %d   NSLog(@"打印字符:%c",c);   NSLog(@"

Android 定位

国内开发者常用到的三种定位方式.它们分别为GPS,百度和高德,惯例先简单介绍下定位的背景知识. 什么是GPS定位.基站定位和Wi-Fi定位? 1.GPS定位:根据设备GPS芯片和GPS卫星实现定位,GPS定位在室内是不可以使用的.GPS定位精度和芯片本身以及实际使用环境有关,一般情况下,GPS定位精度在10m左右. 2.基站定位:根据设备获取的基站信息实现定位,基站定位精度一般不受使用环境影响,主要和基站的覆盖半径有关.基站定位服务精度目前在200m左右. 3.Wi-Fi定位:根据设备获取的Wi