Trover是一个很棒的应用程序:它会向您显示人们上传的发现流(POI) - 按您指定的任何位置(通常是您当前的位置)的距离排序。滚动浏览Feed越远,显示的发现越远。指标可以准确地告诉您当前显示的发现有多远(请参见网站上的屏幕截图)。
这与基于固定区域提供结果(POI)的大多数其他基于位置的应用程序不同(例如,给我所有半径10公里的Pizzerias),这可以使用单个空间数据结构(或支持空间的SQL引擎)实现数据类型)。以Trover的方式交付结果要困难得多:
您可以查询任意位置的POI。给Trover一个位于俄罗斯远东地区的位置,它将发现第一个距离2000公里的发现,并从那里不断增加。
POI的结果列表不受某些空间范围的限制。如果您在Feed中滚动足够长的时间,您可能会看到位于地球另一侧的发现。
以上几点要求对任何地点的POI进行半严格排序。您可以向下滚动并重新加载更多发现这一事实意味着它们可以提供已排序数据的特定部分(例如,向我提供距离我当前位置至少100公里的下20个发现)。
速度快,取物和距离指示是即时的。必须对发现进行预先排序。我不知道他们在他们的数据库中有多少发现,但它必须比你想要的特别排序更多。
我发现这些特征非常引人注目,并想知道这是如何实现的。有什么建议可以使用什么样的数据结构,算法或缓存?
答案 0 :(得分:0)
我不明白这个问题。想要答案的是什么?
编辑: 他们可能使用图形数据库,其中一条边表示节点之间的距离。这样你就可以通过附近POI的关系来获得距离。您可以计算距离并为附近的节点创建边。要获得任意点的距离,您只需进行圆距计算,对于另一个节点,您只需将边值相加,因为它们表示距离(这是获取步行,骑自行车或汽车计算的情况)。加起来可能不是最接近的方式,但会给出它们似乎使用的相对指示。