2009-07-27 17 views
1

我想构建一个位置感知应用程序,它可以自动检测用户的位置,并向他们呈现来自地标数据库的最近地标的排序列表。该应用程序将建立在iPhone上。在iPhone上构建“查找最近的”位置感知应用程序的最佳方式是什么?

最根本的问题是:

  1. 如何计算距离附近的标志性建筑和排序“最近的”
  2. 在哪里进行计算 - 通过Web服务在外部服务器上 - 或在iPhone本身通过SQLite数据库和/或核心位置

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

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

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

回答

2

我会为大部分问题推荐一个双层解决方案。用最快的解决方案做出总体决策,然后在最高点击时使用精细的决策。例如,对于是否存储在设备或服务器上的问题,我建议根据用户的最后位置在设备上存储“本地化”的东西。也就是说,用户接近之前可能会再次接近的事物,所以应该同步这些事情。当用户离开某个区域时,该区域的内容应该移到最近最少使用的列表中并最终清除。所以当你到一个新的位置时,它会很慢,但随着时间的推移会加快。

关于排序,再次,两层是最好的。首先由乌鸦蝇排序。然后,如果路由很便宜(尽管它可能不是),那么你可以通过路由选择排序。如果用户只能看到20次点击,那么一些入口是否是#80或#100并不重要。这太不可思议了,所以计算起来太过遥远了。

一般来说,关于在iPhone上排序,我强烈建议速度超过准确性。如果事情本来应该是#1,实际上是#3,那么几乎与花费20秒计算5次无关。

+0

你提出了一个很好的建议 - 一种混合方法。我想知道缓存整个城市的地标数据是否可行(只有最多1000行左右)。 只缓存10英里范围内的最近位置可能是最有效的,但我不太确定如何为寻找“最近”的地标找到最佳解决方案。即如果用户稍微移动,但仍在该半径内,则不能保证最近的位置也会如此。处理重叠地点问题可能有点棘手。 – mwalsher 2009-07-29 02:37:09

0

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

相关问题