使用新的 Android API 跟踪 100 多个同步地理围栏
Posted
技术标签:
【中文标题】使用新的 Android API 跟踪 100 多个同步地理围栏【英文标题】:Tracking more than 100 simultaneous geofences with the new Android API 【发布时间】:2013-06-25 13:04:33 【问题描述】:我在 9000 km^2 的区域内有大约 3500 个地理兴趣点,我希望我的应用程序在后台运行,并在用户靠近上述任何点时通知用户。
在 2013 年 Google I/O 期间引入的新 Geofence API 似乎非常适合这项工作,尤其是因为它优化了电池寿命,但在我获得状态代码 GEOFENCE_TOO_MANY_GEOFENCES 之前,我似乎无法注册超过 100 个地理围栏(使用演示应用程序的修改版本)。
是否可以增加此限制?也许通过一些设置或 API?
【问题讨论】:
是什么让您无法将您的点保存在数组中并自己将当前位置与它们进行比较? 我可以,但是我可能必须实施类似的电池节省策略,例如尽可能降低准确性或更新频率。我只是认为总体上使用为此目的设计的 API 会更好,而不是自己制作。 【参考方案1】:我建议将所有点下载到设备上的 sqlite db。然后找到最接近的 99 个点,如下所示:SQlite Getting nearest locations (with latitude and longitude) 并将这些点注册到 android 以进行监控。
然后设置一个“重大变化”地理围栏,您可以使用它来监控用户的位置是否发生了足够的变化,以至于当他们退出此地理围栏时,您应该重新加载最近的兴趣点。
【讨论】:
有趣。是的,你是对的,这可以工作。如果我取包含这 99 个点的最小圆,然后减小它的半径,直到它不再与任何其他地理围栏相交,它应该作为一个“显着变化”的地理围栏。【参考方案2】:我认为有 100 个地理围栏的限制。 我不确定这是每个应用程序还是每个用户每个应用程序。 我没有测试这个想法,但是你能注册最接近你位置的前 100 个位置吗?
【讨论】:
我最终编写了自己的地理围栏系统。这些位置看起来太聚集在一起了,我只能跟踪最近的 100 个点,我可能需要 GPS 的准确性才能可靠地做到这一点。但那我不妨自己实现其余的。不过,如果您想使用 Geofence API,这可能是正确的解决方案。所以我将其标记为已接受。 @aadnk 你能分享你自己的地理围栏系统吗? 不幸的是,没有,因为我是为我的员工写的。但我可以解释一下我是如何做到的:我将该区域划分为 30x30 个单元格,每个单元格都包含一个距离单元格中心最近的地理围栏列表。为了从一个点查找地理围栏,我线性搜索最接近该点的单元格中的所有地理围栏,以及三个最近的相邻单元格。 @rokonoid 我确实尝试过其他更高级的空间分区结构(例如 PR-trees),但它们在 Android 和我的数据集上的开销太大。对于静态内容,将地理围栏划分为单元格非常简单且非常快速。另请注意,如果地理围栏恰好位于单元格边界上,则它可能存储在多个单元格中。以上是关于使用新的 Android API 跟踪 100 多个同步地理围栏的主要内容,如果未能解决你的问题,请参考以下文章
可以使用 Google API 通过 android 移动 gps 跟踪位置吗?
使用 FusedlocationProviderClient Api 在 Android 中进行实时位置跟踪的问题