在 iPhone 上构建“查找最近”位置感知应用程序的最佳方法是啥?

Posted

技术标签:

【中文标题】在 iPhone 上构建“查找最近”位置感知应用程序的最佳方法是啥?【英文标题】:What is the best way to architect a "find nearest" location-aware application on the iPhone?在 iPhone 上构建“查找最近”位置感知应用程序的最佳方法是什么? 【发布时间】:2009-07-27 22:45:49 【问题描述】:

我想构建一个位置感知应用程序,该应用程序可以自动检测用户的位置,并向他们显示一个地标数据库中最近地标的排序列表。该应用程序将在 iPhone 上构建。

基本问题是:

    如何计算到附近地标的距离并按“最近”排序 在何处执行计算 - 通过 Web 服务在外部服务器上 - 或通过 SQLite 数据库和/或核心位置在 iPhone 上执行

理想情况下,应用程序将使用“路由距离”而不是乌鸦距离(即更大的圆距离公式)来计算距离,这是更准确的方法。当然,随之而来的是成本——计算起来会慢得多。我想知道哪种方法最合适。

此外,在手机本身上执行计算(使用核心位置?)的优点是无需与服务器通信(更快),并且可以在没有互联网连接的情况下使用该应用程序。缺点是地标数据库难以与最新数据保持同步。

我想知道是否有一种行业标准的方式来实现这样的位置感知应用程序。如果没有,请提出问题的最佳解决方案。

【问题讨论】:

【参考方案1】:

对于您的大多数问题,我建议采用两层解决方案。使用最快的解决方案进行粗略的决策,然后对热门问题使用精细的决策。例如,对于您是存储在设备上还是服务器上的问题,我建议根据用户的最后位置在设备上存储“本地化”的东西。也就是说,用户之前靠近的东西很可能会再次靠近,所以这些东西应该被同步下来。当用户离开一个区域时,该区域中的东西应该被移到最近最少使用的列表中并最终被清除。所以当你去一个新的位置时,它会慢一段时间,但随着时间的推移会加快。

关于排序,再一次,两层是最好的。首先按乌鸦排序。然后,如果路由很便宜(尽管可能不是),您可以通过路由对您的热门命中进行排序。如果用户只会看到 20 次点击,那么某些条目是 #80 还是 #100 并不重要。太低了,无法关心,所以太低了,无法计算。

总的来说,关于 iPhone 上的排序,我强烈建议速度胜过准确性。如果某件事本应是 #1 而实际上是 #3,那与计算 20 秒而不是 5 秒相比,这并不重要。

【讨论】:

你提出了一个很好的建议——一种混合方法。我想知道缓存整个城市的地标数据是否可行(最多只能有 1000 行左右)。仅在例如 10 英里半径范围内缓存最近的位置可能是最有效的,但我不太确定如何将其作为查找“最近”地标的最佳解决方案。 IE。如果用户稍微移动,但仍在该半径内,则不能保证最近的位置也会如此。有效地处理重叠位置的问题也可能有点棘手。【参考方案2】:

解决方案取决于您要搜索的地理对象的数量。 如果你有不到几千,你可以使用一个简单的方法。 如果您有 100.000 到数百万,则需要四叉树。 忘记数据库,那会很慢,除非它是一个空间数据库,恕我直言,iphone上没有。

【讨论】:

以上是关于在 iPhone 上构建“查找最近”位置感知应用程序的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 xCode 构建设置在 iPhone 上预设地理位置?

按邮政编码“查找最近的位置”?

iOS - 地图应用程序与其他位置感知的第三方应用程序

感知器及其应用

在已发布的 iPhone 应用中构建优化级别的设置

在 iPhone 应用程序中弹出视图后的 SIGABRT 信号