当手机到达一组位置时做些啥?

Posted

技术标签:

【中文标题】当手机到达一组位置时做些啥?【英文标题】:Do something when phone reaches a set of location?当手机到达一组位置时做些什么? 【发布时间】:2010-06-01 15:58:37 【问题描述】:

我在数据库中有一个坐标列表,标识为 POI。一个城市可能有 >100 条记录。

我想在手机进入其中一个位置 150 米范围内时收到通知。位置坐标也有误差/半径,通常为 10 到 100 米。由于我觉得为触发器添加每个位置(可能是数百个)并不好,我该如何优化唤醒代码?

我还可以选择从队列中删除之前设置的通知吗?

【问题讨论】:

【参考方案1】:

您可以将 POI 存储在某种智能哈希表中,使用坐标计算唯一哈希。每次位置更新到达时,您都会在哈希表中查找以查看当前位置附近是否有 POI。这个查找应该只需要 O(1),因为它是一个哈希查找。

在计算哈希和存储 POI 时应考虑所需的范围。

只是一个想法!

亲切的问候, 梅菲克斯

【讨论】:

据我所知,在 android 中,您设置通知触发器的方式是告诉系统 to buzz me when phone reaches in coord x, y 您已经告诉了坐标。我可以为我所有的 pois 设置通知,但这可能不适用于数百条记录。侦听位置更新可能会消耗电池电量,因此需要运行应用程序。 Android SDK 有一个 addProximityAlert 方法可以用于这个确切的目的。【参考方案2】:

有一个名为 Locale 的应用程序,它可以根据您的 GPS 位置或可用的 Wifi 网络或基站 ID 等切换各种事件

它还有一个插件界面。检查该应用程序并为它编写插件可能对您很有用。

【讨论】:

我知道 Locale 的存在,我想做一些非常相似但目的不同的事情。我无法使用 Locale 的插件 sdk。【参考方案3】:

这个问题让我想起了电子游戏中的图形。无需加载超出您的运动范围的点。我将地图分解成一个网格,为 8 个相邻的网格块设置触发器,然后为当前网格块中的每个 POI 设置触发器。当到达新的网格块时,触发器会更新。考虑到误差范围,重叠网格块可能会很聪明。

【讨论】:

以上是关于当手机到达一组位置时做些啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++程序进入main函数之前,退出main函数之后会做些啥?

*** / SignalR 无法协同工作。我能做些啥?

我应该做些啥来让它显示变量而不是值?

用mac地址可以能做些啥?

当本地通知到达或超过可以使用的通知总数时做一些事情

返回响应后做些啥?