CLRegion隐藏缓冲区



遇到这个问题后,我担心这个问题不会有答案,但无论如何我都希望。

我已经设置了一些地理围栏(大多数是小的,一个是大的)。我正在使用模拟器,我已经输出了大CLRegion的半径,它告诉我在某个坐标周围的半径是10881.98m,但当我模拟地理位置到距离同一个坐标11281.86m时,它不会触发大区域的locationManager:didExitRegion:委托方法。

虽然较大的区域不会触发locationManager:didExitRegion:,但我已经确认较小的区域每次都会触发委托方法。为什么不开枪?区域周围是否有距离缓冲区?它有记录吗?

任何帮助都会很棒。

编辑:通过测试,我需要将半径减少45.28%左右,才能触发地理围栏。显然,这不是一个好的解决方案,因为它非常不精确,而且违背了地理围栏的整个理念。

我的猜测是,这是模拟器特有的问题。虽然CLRegion在技术上没有缓冲区或填充区,但操作系统需要更长的时间来确定您是否实际离开了地理围栏区域。在那样大的围栏上,我想可能需要更长的时间。在100-200米的较小区域,我看到它需要几分钟的驾驶时间,但在触发事件之前很容易达到300-400米。根据苹果工程师在2013年WWDC上告诉我的,操作系统会慢慢确定你离开了。系统也很难确定你离开了,因为它依赖于蜂窝塔三角测量和已知的wifi网络。它需要远远超出已知的网络,才能安全地触发退出事件。

我知道这不是一个确切的答案,但希望你能更多地了解它们是如何在引擎盖下工作的,以及苹果对它们的期望是什么。祝你好运。

最新更新