iOS5 区域监控准确率

Posted

技术标签:

【中文标题】iOS5 区域监控准确率【英文标题】:iOS5 Region Monitoring Accuracy 【发布时间】:2012-03-13 21:57:44 【问题描述】:

我正在尝试使用 ios5/iPhone 4G 进行精确的区域监控,但我似乎运气不佳。需要明确的是,我能够让区域进入事件;只是我过早地得到它们。让我解释。这是我设置区域的代码:

#define GEO_FENCING_RADIUS 10  // in meters

CLLocationDistance radius = GEO_FENCING_RADIUS;

// Create the region and start monitoring it.
CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:coordinate
                                                           radius:radius
                                                       identifier:identifier];
[self.locationManager startMonitoringForRegion:region   
                               desiredAccuracy:kCLLocationAccuracyBest];

在此代码中,半径设置为 10 米。那么,我的假设是,如果我在该位置的 10 米范围内,我只会收到区域通知。相反,我可以在更高的距离值处获得通知(我已经看到 2 英里的接近触发了该区域)。什么会导致这个?另外,我正在使用显着的LocationChangeMonitoringAvailable 和为CLLocationManager 设置的默认值。也许使用显着LocationChangeMonitoringAvailable 会以某种方式排除更准确的触发事件?

有什么想法吗?

【问题讨论】:

【参考方案1】:

重大位置变更服务仅针对重大位置变更。来自docs:

此方法指示设备是否能够仅根据重大位置变化报告更新。 (重要的位置变化监控主要涉及检测当前与设备相关联的蜂窝塔的变化。)此功能为想要跟踪用户大致位置且不需要高度准确的位置信息的应用程序提供了巨大的节能效果。

区域监控的工作原理与此相同,因此它只能在您距离兴趣点约 1 公里范围内时告诉您。 (请注意,由于这是基于手机信号塔的定位,您将获得或多或少的准确度取决于该地区手机信号塔的密度,并且只能在具有蜂窝连接的设备上使用这种方法 - 没有 iPod touch 或WiFi iPad。)

如果您既想要区域监控/重大变化监控的强大优势,又想要在感兴趣区域内精确跟踪位置的能力,您只需首先设置前者……然后,一旦您在感兴趣的区域/附近,切换到更高精度的监控。 (这可能最好使用CLLocationManager 的单独实例来完成。)

【讨论】:

在准确性方面,使用区域监控相对于显着的位置变化是否有任何优势? 它们在准确性方面大致相同,但它们的用途不同。假设您的应用想知道用户何时离开家并在通勤 20 公里后到达工作地点...使用区域监控,您将在用户离家大约 1 公里时收到通知,并在用户离开家时再次收到通知在大约 1 公里的工作范围内。使用显着的位置变化,您将在途中收到 10-20 条通知,每次用户移动大约 1 公里(由于在本示例中您不需要这些通知,您所做的只是浪费电池)。 (另外值得注意的是:这两种服务都基于当前与设备关联的手机信号塔,因此在人口稠密地区您可能会看到优于 1 公里的精度,而在人口稀少的地区则更差:1 公里是只是 Apple 所说的一般准则,您可以平均预期。) 作为数据点,我似乎在旧金山 SOMA 的每一英里都在更换手机信号塔。 我想补充一点,通过最近的改进,Region Monitoring 现在可以以 5-10 米的精度通知您。

以上是关于iOS5 区域监控准确率的主要内容,如果未能解决你的问题,请参考以下文章

iOS 区域监控重用项目问题

后台任务似乎没有被取消/结束

CLLocation 区域监控在 iOS 5.1 和 iOS 6 中的行为不同

php 获取准确的ip,并通过ip准确获取所在区域 的方法

在 iOS5 中使用 Accuracy 查找用户位置的方法

zabbix2.0监控到的cpu load值不准确