重大地点变更 - 我们有啥保证?
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 接收会比在城市或室内更好。如果您的区域人口稠密,您可能还需要使用CLCircularRegion
的containsCoordinate
方法,以防更新触发时您已经在其中一个区域内
实际上,除非某些应用程序(无论是系统还是第三方)主动使用定位服务,否则绝对不是“逐英尺追踪距离”。启动无线电以进行修复——尤其是准确的修复——会消耗大量电力。如果不使用定位服务,系统会将其关闭,以免耗尽电池。作为开发人员,您必须决定您真正需要多少准确度。如果 500m 不够准确,您希望使用常规位置服务而不是显着变化。以上是关于重大地点变更 - 我们有啥保证?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 的下一步, Dart 3 重大变更即将在 2023 到来
孟晚舟保释后首次发声;谷歌将提前关闭Google+;phpMyAdmin发布新版本;锤子科技有限公司子公司锤子数码出现重大变更