我目前正在尝试让我的应用程序使用以下方式监视特定区域CoreLocation
然而我发现它似乎没有按预期工作,在我看来,它不能在每个位置设置较小的小半径(即 10m)的情况下工作。
我还制作了一个小测试应用程序,它绘制了圆半径在地图上,这样我就可以直观地看到正在发生的事情。
我用于监控位置的代码如下:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// Set-up a region
CLLocationDegrees latitude = 52.64915;
CLLocationDegrees longitude = -1.1506367;
CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake(latitude, longitude);
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:centerCoordinate
radius:10 // Metres
identifier:@"testLocation"];
[self.locationManager startMonitoringForRegion:region];
我还没有在这里贴出代码DidEnter
据我所知,当我距离监控区域超过 100m 时,该功能就会起作用。
这是应用程序的屏幕截图,当我距离地图上的紫色位置超过 10 米时,退出区域事件不会触发,但是如果我切换我的location to London它会点火,当我设置我的location回到当前蓝色位置,它也会触发。
有谁知道最小区域半径是否有限制,或者我可能做错了什么。
谢谢亚伦
我认为区域监控对于如此小的半径来说效果不佳。
- GPS 芯片的最佳精度和
kCLLocationAccuracyBestForNavigation
通常只有10米。
- 苹果公司表示(在位置和地图 PG https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html#//apple_ref/doc/uid/TP40009497-CH9-SW11)区域的最小距离应假设为 200m
- 我听说区域监控正在使用 WiFi 来获取其位置(这对于节省电量很有意义)。 WiFi精度更像是20m-100m。我不确定让另一个应用程序使用后台位置(即使用 GPS)会如何影响这一点。位置经理可能会共享信息以提高准确性。
- 区域监控在进入区域后可能需要 30 秒才能触发,而在离开区域后需要几分钟才能触发(以防止位置故障触发它)。
- 当区域监控首次引入时,他们表示它仅适用于 100m 的区域,任何较小的区域都会被提升。这种情况可能仍然会发生。
- 有一个已弃用的方法
startMonitoringForRegion:desiredAccuracy:
它允许您指定超出区域边界的距离以开始生成通知。想必这个功能已经被纳入startMonitoringForRegion:
但仍然存在。 10m 的区域最终可能有 10m 的缓冲区。
- 如果要执行此操作,请指定要监控的周围更大的区域,当设备在该区域唤醒时,启动后台位置更新 (GPS) 并使用
CLCircularRegion
's -containsCoordinate:
当设备在10m以内时手动触发。这种方法是苹果官方认可的(参见2013 年全球开发者大会 https://developer.apple.com/videos/wwdc/2013/第 307 节)。
来自CLCircularRegion
docs:
请记住,位置管理器不会在跨越区域边界时立即生成通知。相反,它应用时间和距离标准来确保穿越是有意的并且应该真正触发通知。因此,请选择合适的中心点和半径,并给您足够的时间来提醒用户。
来自位置和地图 PG https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG:
区域事件可能不会在跨越区域边界后立即发生。为了防止虚假通知,iOS 在满足某些阈值条件之前不会发送区域通知。具体来说,用户的位置必须跨越区域边界,远离边界最小距离,并在报告通知之前保持在该最小距离至少 20 秒。
具体阈值距离由硬件和当前可用的定位技术确定。例如,如果 Wi-Fi 被禁用,区域监控的准确度就会显着降低。但是,出于测试目的,您可以假设最小距离约为 200 米。
还有更多内幕消息凯文·麦克马洪的这篇文章 http://www.kevfoo.com/2012/07/Core-Location-The-Missing-Details/,他在 WWDC 2012 的实验室中向 Core Location 工程师询问了有关区域监控的问题。此期间信息将会发生变化,但有关区域类别的部分很有趣。这是一个编辑:
精细区 (0 - 150m)
- 楼层为 100m 时,该类别的有效范围为 100-150m。
- 对于区域而言,此大小的性能很大程度上取决于与位置相关的硬件
- 跨越区域边界后,Core Location 检测并调用相应委托方法所需的时间平均约为 2-3 分钟。
- 一些开发人员独立地发现,较小的区域会看到更快的回调,并将较小的区域聚集起来覆盖一大片区域,以改善区域交叉通知。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)