省电的iPhone定位

1.Getting the User’s Current Location 
获取用户当前位置。 
获取位置的方式有三种:GPS, cell tower triangulation(蜂窝站点), 和 Wi-Fi Positioning 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] view plain copy

print?

  1. extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation ;
  2. extern const CLLocationAccuracy kCLLocationAccuracyBest;
  3. extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
  4. extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
  5. extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
  6. extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;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

开始定位 
当你转备好为定位消耗电池时我们可以调用 
[locationManager startUpdatingLocation]; 
来告诉 Location Manager开始定位 
6.Using the Location Manager Wisely 
如果你只需要确定当前位置而不需要进一步定位,当Location Manager查询到当前位置时需要通知代理停止定位。 
停止方法: [locationManager stopUpdatingLocation]; 
7.The Location Manager Delegate 
Location Manager必须遵守CLLocationManagerDelegate协议,CLLocationManagerDelegate协议定义了两个方 法,并且这两个方法都是可选的。其中一个方法是当确定当前位置或是位置信息改变时调用。另一个方法是当遇到错误信息时调用 
8.Getting Location Updates 
当Location Manager想通知它的代理当前位置时,它会调用 
locationManager:didUpdateToLocation:fromLocation: 方法。 
这个方法有3个参数第一个参数Location Manager。第二个参数是一个CLLocation对象用来确定当前位置,第三个是CLLocation 对象用来确定最近一次更新的位置。该方法调用时,先前的location对象会被置空。 
9.Getting Latitude and Longitude Using CLLocation 
经纬度 
位置信息是通过使用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-10 22:32:52

省电的iPhone定位的相关文章

关于iphone定位的基本知识

每一个CLLocation对象都有一个叫verticalAccuracy的属性来判断精确度.海拔数值可能会有verticalAccuracy大小的误差,当verticalAccuracy为负值时,那是Core Location在通知你不能获取海拔高度. 1.Getting theUser’s Current Location 获取用户当前位置. 获取位置的方式有三种:GPS, cell towertriangulation(蜂窝站点), 和 Wi-FiPositioning Service (W

练手之爬取某电商IPHONE信息

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/12/30 10:51 # @Site : # @File : jd_iphone.py # @Software: PyCharm import json import time import urllib3 import logging import requests from pyquery import PyQuery from selenium import webd

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

iOS定位服务

iOS提供3种不同的定位途径: 1,WiFi定位,通过查询一个WiFi路由器的地理位置信息,比较省电:iPhone,iPod touch和iPad都可以采用: 2,蜂窝式移动电话基站定位,通过移动运营商基站定位,只有iPhone,3G版本的iPod touch 和iPad可以采用. 3,GPS卫星定位,通过3-4刻GPS卫星位置定位,最为准确,但是耗电量大,不能遮挡,iPhone,iPod touch和iPad都可以采用. iOS与Android系统定位的区别: Android系统在定位服务编程

从开发者的角度分析iOS应如何省电

从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iOS的各项功能和技术进行说明,得出合理的省电技巧,以供大家参考. 如果你对省电原理没有兴趣,请直接到文章最后,查看如何省电的方法. 哪些功能(硬件)是耗电大户 网络下载 wifi和4G都是耗电大户,但是要知道手机上的网络模块并不是一直在高速工作状态.一般认为下载时耗电多,如果不是处于下载状态,耗电较少

京东上市后首次盈利 品质电商成逆袭最大功臣

文/张书乐 据媒体报道,10日晚间,京东集团(Nasdaq:JD)发布2016财年第二季度业绩.让人颇为意外的是,经历618大促一片激烈厮杀过后,京东的净利润水平不降反升,非美国通用会计准则下(Non-GAAP)净利润达到3.914亿元人民币,去年同期为亏损1570万元:美国通用会计准则下(GAAP)下净亏损1.321亿元,较去年同期净亏损5.104亿元大幅收窄,超出华尔街的预期. 如果按GAAP的标准,则京东在2016年第二季度,实现了上市以来的首次盈利.这也是京东的对标企业亚马逊盈利之后,一

Map定位

定位功能: 定位是一个很常用的功能,如一些地图软件打开之后如果用户允许软件定位的话,那么打开软件后就会自动锁定到当前位置,如果用户手机移动,那么当前位置也会随着变化.要实现功能需要使用CoreLocation中的CLLocationManager类,首先看一下这个来的一些主要方法和属性: 类方法: 1.+(BOOL)locationServicesEnabled; 说明:是否启用定位服务,通常如果用户没有启用定位服务,可以提醒用户打开定位服务. 2.+(CLAuthorizationStatus

iOS开发 定位服务与地图

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

iOS8定位与地图

iOS开发系列--地图与定位 转载:http://www.cnblogs.com/kenshincui/ 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看