Android:感知当前位置和某个兴趣点之间距离的正确方法?

Android: Right approach for sensing the distance between current location and some point of interest?

我对 android 的编程方法有疑问 - 它是否有效。只是为了让您了解我要完成的工作:

一张地图上有多个兴趣点。如果用户离 PIT 更近,则会出现关于距离的通知。假设有 3 个通知:距离为 1 英里、0.5 英里和 0.1 英里。当用户或多或少正好在 PIT 时,不再显示通知。用户应该驾驶汽车或其他车辆。

我目前正在使用 Geofences 来检测用户是否进入了 1 英里的半径。如果是这样,我检查他当前位置到 PIT 的距离。如果距离大约 0.5 或 0.1 英里,则会触发通知。因此,我经常检查当前位置(现在每 10 秒一次)。如果用户喜欢在 PIT 或非常接近 PIT,Geofence 将退出并完成。

代码运行良好,这种方法是我在阅读 Android 开发人员教程等时首先想到的。但是还有其他更有效的方法吗?

虽然这(目前)满足了我的需求,但我有两个主要顾虑:

  1. 好像很耗电。由于用户很可能在车里,在使用期间他可以为他的 phone 充电,所以这可能不是什么问题。

  2. 我从SD卡上的一个文件中读取了PIT的数量。在我的示例中,我只有几个 PIT。但用户可以修改源数据,以便他可以添加任意数量的数据。 Google 表示每个用户仅支持 100 个活动地理围栏。但是如果我的用户有超过 100 个 PIT 怎么办?由于我使用地理围栏来感知是否必须触发第一个通知 - 这是一个严重的问题。那么还有其他选择吗?

我有几点建议:

1) 要减少 gps 修复的数量,您可以计算睡眠时间。这个想法是在靠近 'border' 时频繁进行 gps 修复,而在远离时进行少量修复。这可以通过考虑 GPS 返回的速度参数来进一步增强。 例如,如果用户以 20 英里/小时的速度行驶时距离最近的边界 20 英里,您可以轻松地等待 30 分钟,然后再次打开 gps,这只是举一个简单的例子。

2) 我 运行 遇到了同样的问题。我的解决方案只是 select 只有 X 英里内的 POI。这样可以确保永远不会冒险达到 100 的限制。当用户从他的初始位置移动 (X-1) 英里时,地理围栏将使用新位置重建。 如果您认为拥有如此高密度的点的风险很高,以至于上述策略仍然可能失败,我会考虑完全基于 gps 而不是地理围栏进行您自己的接近度检查。