查找动态和静态几个坐标纬度/经度之间距离的算法

问题描述

我正在Flutter开发一个应用程序,它将具有一些混合功能,例如分类应用程序/ Tinder。我需要有关如何实现此目标的逻辑或建议。请耐心等待我的解释。

用例: 用户A:发布有关出售其电视的广告,并将其地址添加到广告中-(长整天) 用户B:在同一个应用中,他正在寻找电视广告,但他将搜索半径设置为5公里。 (我们从用户B的设备中获得了用户B的位置。纬度/经度)

  • 现在我的items_db表格中的电视广告信息与位置一起保存了
  • 用户B显示他附近的电视;我可以计算项目与用户间的距离(使用Google Api
  • 但是要向他展示附近的所有电视,我必须首先计算用户分类/ items_db中所有可用项目之间的距离,以找出其中的多少实际上是在他应用的5公里过滤器下。
  • li>
  • 现在我们谈论的是1个用户:但是,如果我有1000个用户,那么我将必须计算所有项目与所有用户位置之间的距离,然后仅向他显示指定范围内的项目(即5公里或10公里)

这看起来太大或不好,无法实现。所以我的问题是我们该怎么做?


如果这还不够清楚,请在此处以Tinder为例:

当我在Tinder中选择“仅向我显示方圆2公里的人”时。那火种怎么知道呢?我的意思是要弄清楚谁在2公里之外;他们首先必须计算所有可用用户的距离,才能看到可以显示出符合2 km标准的最终用户!那里怎么样?

解决方法

您当然可以检查每对点之间的距离,但这不是您唯一的选择。

通常,您想要找到每个点的最近邻居。也就是说,您只想查找在一定距离内的其他点。通常,这称为nearest neighbor search。没有唯一的最佳方法来执行此操作,实际上,性能可能会根据您的确切数据而有很大差异,但是可能值得考虑的两种方法是locality-sensitive hashing,该方法使用哈希函数尝试将相似的点放在相同的存储桶(甚至在相距很近的存储桶中),因此您只需要检查这些存储桶以找到邻居,以及k-d trees,这是一个设计为考虑到最近邻居搜索的数据结构。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...