iOS5区域监控准确性

时间:2012-03-13 21:57:45

标签: iphone ios ios5 iphone-4

我正在尝试使用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英里距离)。什么会导致这个?此外,我正在使用significantLocationChangeMonitoringAvailable和为CLLocationManager设置的默认值。也许使用significantLocationChangeMonitoringAvailable会以某种方式排除更准确的触发事件?

有什么想法在这里发生了什么?

1 个答案:

答案 0 :(得分:2)

重要的位置更改服务仅适用于重要的位置更改。来自docs

  

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

区域监控的工作方式相同,因此它只能告诉您何时距离您感兴趣的点约1公里。 (请注意,由于这是基于蜂窝塔定位,根据区域中蜂窝塔的密度,您将获得或多或少的准确度,并且只能在具有蜂窝连接的设备上使用此方法 - 无iPod touch或WiFi iPad。)

如果您既想要区域监控/显着变化监控的功率优势,又能够精确跟踪感兴趣区域内的位置,那么您首先需要设置前者...然后,一旦您在感兴趣的区域内/附近,请切换到更高精度的监控。 (这可能最好使用CLLocationManager的单独实例。)