didEnterRegion调用较大的半径(iOS)

我想要非常精确地调用didEnterRegion,但是我无法做到这一点。 以下是我所做的:我使用了distanceFilter和desiredAccuracy(根据Apple的最精确的GPS设置)的最佳值,并且具有目的地CLCircularRegion(CLRegion的子类)。

self.locationManager.distanceFilter = kCLLocationAccuracyBestForNavigation; self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; @property (nonatomic, strong) CLCircularRegion *Destination; self.Destination = [[CLCircularRegion alloc] initWithCenter:CLLocationCoordinate2DMake(43.907691, -69.963158) radius:5 identifier:@"Destination"]; [self.locationManager startMonitoringForRegion:self.Destination]; 

问题是当我离这个目的地150米远时,didEnterRegion被调用。 也在类似的距离离开didExitRegion被调用。 我想要在5米以外,而不是150米以外的地方调用didEnter和didExit区域,因为我已经指定了CLCircularRegion的启动。 有没有人有办法解决吗? 精度是我需要的,150米而不是5米对我来说太不准确了。 谢谢吨 –

(我用iPhone 4S来testing)

尽pipe目前的GPS +技术装备在理论上可以达到5米的精度,但苹果可能出于各种原因阻止了区域监测的准确性。

一个是,他们总是想要一个良好的用户体验,你想要的5米精度在你经常从GPS读数获得的精度范围内。 因此,留下这样一个小区域也可能是由于读数较低,而用户仍在该区域内。 Apple通过设置发布regionEnter或regionExit通知的阈值来掩盖此类错误。 从Apple文档 :

在iOS模拟器或设备上testing您的区域监控代码时,请注意区域边界越过后,区域事件可能不会立即发生。 为了防止虚假的通知,iOS在达到某些阈值条件之前不会传递区域通知。 具体来说,用户的位置必须跨过区域边界,从边界移开最小距离,并且在通知被报告之前保持在该最小距离处至less20秒。

特定的阈值距离由当前可用的硬件和位置技术确定。 例如,如果Wi-Fi已禁用,则区域监视的准确性将大大降低。 但是,出于testing目的,您可以假设最小距离大约为200米

不过既然你可以要求高精度的读数,苹果也应该考虑到这一点。 替代scheme可能是 – 如您所说 – 使用didUpdateLocation:并确定是否在区域内部或外部。 这样你可以包括一个testing的位置准确性,只接受水平精度足够好的出口/入口。