重大地点变更 - 我们有啥保证?

Posted

技术标签:

【中文标题】重大地点变更 - 我们有啥保证?【英文标题】:Significant Location Changes - What guarantees do we have?重大地点变更 - 我们有什么保证? 【发布时间】:2014-11-04 18:21:07 【问题描述】:

我目前正在编写一个移动 ios 应用程序,它使用 iOS 重大位置更改服务来管理大量的地理围栏,当我们从 CoreLocation 框架收到此消息时启用和禁用地理围栏。

Apple 开发者网站上写着:

重大变化位置服务仅在设备位置发生重大变化(例如 500 米或更多)时才会提供更新。

真正让我失望的是“500 米或更多”,重要的位置更改服务究竟基于什么,我们实际上有什么保证?

此 API 是否可靠地跟踪区域之间的变化,以便我们在收到消息时知道是时候重新分配地理围栏(假设我们每 500 米半径的地理围栏少于 20 个)?

【问题讨论】:

【参考方案1】:

我做了一个实验,在 10 个真实用户设备上使用显着的位置更改 API 运行一个小应用程序,为期两周(因此他们在上班、回家、周末外出等)。大都市环境(意大利米兰)。注册了大约 1800 个重要的位置更新事件。

核心成果是:

平均每天大约有 10 次位置更新 CoreLocation 表示的水平精度分布如下表所示 但是,这并不能保证一旦用户从上次位置更新定义的圆圈中移出,CoreLocation 的水平精度就会发送一个新的位置事件。换句话说,您无法确定用户在任何特定时刻都在这个圈子中。 如果其他应用使用设备上的 GPS(例如在导航期间),到达我的应用的位置事件也会更加准确。

分布表应如下所示:第一列是以米为单位的水平精度,第二列是位置更新有多少百分比等于或比第一列更准确。

Accuracy   Cumulative distribution
   10m        23.76%
   20m        23.76%
   50m        23.76%
  100m        49.86%
  200m        65.09%
  400m        65.31%
  500m        65.31%
 1000m        68.66%
 2000m        92.64%
 4000m        97.82%
>4000m       100.00%

也就是说,几乎 2/3 的位置更新比 200m 更准确。

【讨论】:

您的意思是“重大位置变化”生成的位置点可能来自为其他应用程序生成的缓存 GPS 位置吗?即使在文档中指定“重大位置变化”:依赖低功耗替代方案(例如 Wi-Fi 和蜂窝信息)来确定用户的位置? 我没有任何证据,但它似乎是这样工作的:当我在另一个应用程序中使用 GPS 时,我的测试应用程序也收到了更高频率的位置更新(我不记得了,也许一次有的每 5 分钟一次)和更高的精度(5-10m) 我明白了,所以假设位置点完全来自网络是不值得的。顺便谢谢你的快速回答。【参考方案2】:

500 米是 0.31 英里 - 大约是 3 英里。他们没有具体说明它有多精确,但根据使用 GPS 和核心定位框架时的测试,它非常准确(即使代码中没有调用 startupdatinglocation 方法,它也应该是逐脚跟踪距离)。

【讨论】:

我同意,根据我的经验,重大位置变化的更新非常定期 - 当然这在很大程度上取决于环境 - 在开放空间 GPS 接收会比在城市或室内更好。如果您的区域人口稠密,您可能还需要使用CLCircularRegioncontainsCoordinate 方法,以防更新触发时您已经在其中一个区域内 实际上,除非某些应用程序(无论是系统还是第三方)主动使用定位服务,否则绝对不是“逐英尺追踪距离”。启动无线电以进行修复——尤其是准确的修复——会消耗大量电力。如果不使用定位服务,系统会将其关闭,以免耗尽电池。作为开发人员,您必须决定您真正需要多少准确度。如果 500m 不够准确,您希望使用常规位置服务而不是显着变化。

以上是关于重大地点变更 - 我们有啥保证?的主要内容,如果未能解决你的问题,请参考以下文章

软件的版本号变更有啥原则?

Xamarin挖墙脚系列:Xamarin4.0的重大变更

运维变更难点分析和应对方式

(SwiftUI 变更检测)这段代码有啥问题?

Flutter 的下一步, Dart 3 重大变更即将在 2023 到来

孟晚舟保释后首次发声;谷歌将提前关闭Google+;phpMyAdmin发布新版本;锤子科技有限公司子公司锤子数码出现重大变更