按与当前位置的距离对 POI 进行排序
Posted
技术标签:
【中文标题】按与当前位置的距离对 POI 进行排序【英文标题】:Sort POIs by distance from current location 【发布时间】:2011-08-22 10:05:57 【问题描述】:Trover 是一个很棒的应用程序:它向您显示人们上传的发现 (POI) 流 - 按与您指定的任何位置(通常是您当前位置)的距离排序。您在提要中滚动得越远,显示的发现就越远。一个指示器非常准确地告诉您当前显示的发现有多远(参见网站上的屏幕截图)。
这与大多数其他基于位置的应用程序不同,这些应用程序基于固定区域(例如,给我所有半径为 10 公里的比萨店)提供结果 (POI),可以使用单个空间数据结构(或支持空间的 SQL 引擎)来实现数据类型)。以 Trover 的方式交付结果要困难得多:
您可以查询任意位置的 POI。给 Trover 一个位于俄罗斯远东地区的位置,它将在 2000 公里外的第一个位置提供发现,并从那里不断增加。
兴趣点的结果列表不受某些空间范围的限制。如果您在提要中滚动足够长的时间,您可能会看到地球另一端的发现。
以上几点要求对任何位置的 POI 进行半严格排序。您可以向下滚动并重新加载更多发现这一事实意味着它们可以提供已排序数据的特定部分(例如,给我接下来的 20 个发现,这些发现距离我当前位置至少 100 公里)。
速度很快,抓取和距离指示是即时的。发现必须预先分类。我不知道他们在他们的数据库中有多少发现,但它一定比你想要临时排序的要多。
我发现这些特性非常显着,想知道这是如何实现的。有什么建议可以使用哪种数据结构、算法或缓存?
【问题讨论】:
【参考方案1】:我不明白这个问题。想要回答什么?
编辑: 他们可能会使用一个图形数据库,其中一条边表示节点之间的距离。这样你就可以通过附近 POI 的关系来获得距离。您将计算距离并创建到附近节点的边。要获得任意点的距离,您只需进行圆距离计算,对于另一个节点,您只需将边值相加,因为它们表示距离(这是用于获取步行、骑自行车或汽车计算的情况)。加起来可能不是最接近的方法,但会给出他们似乎使用的相对指示。
【讨论】:
这是一个答案吗?我编辑了这个问题,希望现在更清楚了。我不指望一个单一的答案,更多的技术结合起来可以实现上述特征。 这更像是一个答案!你的意思是节点是POI吗?我认为计算当前位置和 POI 之间的距离相对简单,因为每个 POI 都附有纬度/经度。棘手的部分是首先选择最接近当前位置的节点 (POI),假设您有很多节点。如果我理解正确,您建议从最近的节点进行某种广度优先搜索以找到下一个最近的节点? 你想要预先计算,你需要一个智能的数据结构来存储。以上是关于按与当前位置的距离对 POI 进行排序的主要内容,如果未能解决你的问题,请参考以下文章