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

时间:2009-07-27 22:45:50

标签: iphone gps gis algorithm core-location

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

基本问题是:

  1. 如何计算到附近地标的距离并按“最近”排序
  2. 在哪里执行计算 - 通过Web服务在外部服务器上执行 - 或通过SQLite数据库和/或核心位置在iPhone上执行
  3. 理想情况下,应用程序将使用“路由距离”而不是乌鸦飞行距离(即更大的圆距离公式)来计算距离,这是更准确的方法。当然,这需要一个成本 - 计算起来要慢得多。我想知道哪种方法最合适。

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

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

2 个答案:

答案 0 :(得分:2)

对于大多数问题,我建议采用双层解决方案。使用最快的解决方案进行总体决策,然后使用您的热门点击进行精细级别的决策。例如,关于是否存储在设备上或服务器上的问题,我建议根据用户的最后位置在设备上存储“本地化”的东西。也就是说,在用户可能再次接近之前用户已经接近的事情,所以这些事情应该同步下来。当用户移出某个区域时,来自该区域的东西应该沿着最近最少使用的列表移动并最终被清除。因此,当你去一个新的地方时,它会缓慢一段时间,但随着时间的推移会加快。

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

一般来说,关于iPhone的排序,我强烈建议速度超过准确性。如果某些东西应该是#1并且实际上是#3,那么与计算20秒相比,这几乎无关紧要。

答案 1 :(得分:0)

解决方案取决于您要搜索的地理对象的数量。 如果你的数量少于几千,你可以采用一种简单的方法 如果你有100.000到数百万,你需要一个四叉树 忘记数据库,即慢速,除非它是iphone在iphone上不可用的空间数据库。