解码CLLocationAccuracy const

dav*_*ave 32 location energy core-location cllocation ios

CLLocation.h中列出了以下内容,但根据我的经验,它们是欺骗性的名称 - 可能最初被认为有两个目的,1.测试返回位置的准确性,以及2.设置位置管理器的工作难度,具体是什么启用(gps(多少个卫星频道),wifi工作有多难,三角测量等.

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; // (raw value: -2)
extern const CLLocationAccuracy kCLLocationAccuracyBest; // (raw value: -1)
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; // (raw value: 10)
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; // (raw value: 100)
extern const CLLocationAccuracy kCLLocationAccuracyKilometer; // (raw value: 1000)
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers; // (raw value: 3000)
Run Code Online (Sandbox Code Playgroud)

我很想看看CLLocation.m,但由于这种情况不太可能很快发生 - 任何人都有任何现场测试显示他们认为这些不同模式正在发生的事情.

即,kCLLocationAccuracyBest = 10卫星(频道/中继?),100%电源到wifi等.

我有点猜测这里的稻草 - 我认为这是苹果应该提供的信息类型 -​​

我真正想知道的是,与kCLLocationAccuracyThreeKilometers电池电量相关的实际情况是gps开启了吗?1坐在后备箱?启用wifi?计时器上的wifi?谁知道?我知道我想

And*_*tle 54

我同意Olie的观点,隐藏算法的细节是为了保护应用程序开发人员不要担心如何确定位置.也就是说,我认为提出这样一个问题仍然是合理的:"我的准确度选择有什么影响力?".

我有一些信息可以指导您决定使用哪些信息,但我不知道Apple实施的真实细节.

首先,假设随着读数变得更加准确,系统将需要使用更多耗电的无线电.例如,在100米范围内,最详细的读数需要GPS,并且它使用的功率最大.

以下是用于确定准确性的机制的有根据的猜测.列表订购时(1)是最高的电池消耗.

  1. GPS - kCLLocationAccuracyBestForNavigation;
  2. GPS - kCLLocationAccuracyBest;
  3. GPS - kCLLocationAccuracyNearestTenMeters;
  4. WiFi(或农村地区的GPS) - kCLLocationAccuracyHundredMeters;
  5. Cell Tower - kCLLocationAccuracyKilometer;
  6. Cell Tower - kCLLocationAccuracyThreeKilometers;

在选择时,Apple建议您选择应用程序可以承受的最粗粒度的精度.

希望有所帮助,a.little.

  • 每个苹果文档:kCLLocationAccuracyBestForNavigation使用尽可能高的准确度并将其与其他传感器数据相结合.这种精确度旨在用于需要始终获得精确位置信息的导航应用,并且仅在插入设备时使用.这是与传感器/电源使用有关的唯一常量. (2认同)

Abh*_*ert 9

在一个主要城市的商业区,无线网络和蜂窝塔三角测量都非常好.住宅郊区他们不是那么好.在农村地区,如果他们工作,他们几乎不工作.

GPS在室内不能很好地工作,并且可能需要很长时间才能获得任何修复,而无需基站帮助(可能需要20分钟!!).卫星需要很长时间才能广播足够的信息来确定您的位置,并且可能会丢包(云,建筑物,树木,山脉等).值得注意的是,一个合适的高端GPS将拥有一个篮球大小的天线,没有手持GPS可以获得完美的信号.

即使在室外有完美的信号,当您快速改变方向时(例如在高速公路或多风的道路上),GPS也是不准确的.BestForNavigation设置使用加速度计和陀螺仪来抵消这一点.

目前,iOS平台使用:

  • GPS:非常准确,但功耗很高,速度慢,并不总是可用.有些硬件没有GPS.
  • WiFi:大量的电力消耗,只适用于城市.也可能是错误的(例如,把你放在错误的城市)
  • 细胞塔:几乎没有动力,在城市中运作良好.农村地区不太好.在某些硬件上不存在.
  • 加速度计:对其他位置修复略有改进,但功耗很大.
  • 陀螺仪:对其他位置修复略有改进,但功耗很大.仅限iPhone 4.

你给它一个你所需要的精度(常量只是米的名称),它将使用上述的组合,以最快的速度和最低的功耗来获得这种精确度.它使用的技术将从一个用户改变到另一个用户,并将根据用户当时所处的世界位置而改变.

  • @mskw WiFi/GSM三角测量使用非常少的功率.GPS使用相当大的功率.具有加速器/陀螺仪校正的GPS需要大量的数学运算并使CPU工作困难,因此功耗非常大. (2认同)

Oli*_*lie 2

使用 extern 而不是暴露实际发生的情况的全部目的是,这样底层的 gerwerkkin 就可以改变,并且您的代码不必担心它来获得改进。

也就是说,CLLocationAccuracy 被 typedef-ed 为 double,所以我认为可以合理地猜测 kCLLocationAccuracyNearestTenMeters = 10.0、kCLLocationAccuracyHundredMeters = 100.0 等。最好的可能是 0、1 或 kCLLocationAccuracyNearestTenMeters,而 BestForNavigation 可能是他们为了帮助人们而扔掉的一个比如汤姆汤姆等

如果你真的想知道,你可以打印出这些值——它们只是双精度数。

我不认为卫星数量或 WiFi 功率会根据您所需的精度而改变。根据我理解算法的方式,有一个近似计算,循环次数越多,它就越准确。因此,不太准确的只是提前保释。

但是,更重要的一点是:这并不重要。苹果特别没有描述幕后发生的事情,因为这不是设计的一部分。设计是:如果你使用 kCLLocationAccuracyKilometer,你会得到一公里以内的答案,等等。苹果现在可以自由地改变他们得到这个结果的方式,而无需你关心。这种隔离是面向对象编程的基本原则。

编辑:

更正——我刚刚在现场观看 WWDC 会议(第 115 场会议),大约在 22:00 左右,他谈到了如何在使用 BestForNavigation 时添加一些陀螺仪校正(如果可用)。但是,他警告说,虽然这是电力和 CPU 密集型的,并且应该仅在必要时使用,例如路线导航。

我不确定我还能公开谈论多少,但是,如果您是注册开发者,您可以从 iTunes-U 获得会议。

(顺便说一句,这是 WWDC-2010。)