【问题标题】:Filter a database of locations due to user's current location with radius由于用户当前位置的半径过滤位置数据库
【发布时间】:2017-06-13 21:26:15
【问题描述】:

大家好,我正在开发一个特定的 android 应用程序,该应用程序具有遍布全国的位置的 BigData,我想根据用户当前位置的半径来过滤这些位置。

为了阐明我的目的,我的用户是一名汽车司机,他通过使用标记指定起点和终点在谷歌地图上选择一条随机道路,然后我使用谷歌 API 在这些点之间绘制一条道路

我想要做的是从我的数据库中获取仅位于所选道路上的位置,所以我想根据用户的当前位置过滤我的数据库位置,并给它一个半径,即道路上的距离(距离在用户选择的两个标记之间)并开始在地图上显示它们。

注意:我想将我数据库中的位置与用户当前位置进行比较,如果它小于半径(两个标记之间的距离),那么我会将其添加到我的过滤结果中

但我认为我有一个大数据是一团糟,比较需要太多时间。

Google Maps 是否有任何算法或 API 可以用来过滤这个问题? 即使它是用 Web 编程语言编写的,我也可以创建一个 Web 服务来处理它并将其发送到我的应用程序。

【问题讨论】:

  • with a radius。计算半径非常耗时。或者确定点是否在一个圆圈中。特别是如果你有很多点。我会首先选择一个正方形的点。因为这只是两个减法。
  • 从一开始我就不喜欢半径,这对我来说是一个很大的分心,因为它是一条我想要的点不是整个半径的道路,但我找不到另一个表达我的问题,你能告诉我更多关于 Square 方法的信息吗?
  • 你只要看看 abs(lat1-lat2)
  • sry 但我不知道 deltalat 和 deltalon 来自哪里?有什么价值观?
  • 这取决于你。假设您要查找的点应在距离道路 100 m 以内。然后将 100 m 转换为 deltalon 和 deltalat。

标签: javascript android google-maps


【解决方案1】:

我找到了解决问题的方法

在我的应用程序中,我使用 Firebase 作为 cloudbacked,幸运的是它有一个名为 GeoFire 的执行 GeoQueries 的库,它的文档是 here

它可以创建对 Firebase 中所有保存位置的查询,因为特定位置以毫秒为单位的半径,这是我真正需要的

【讨论】:

    【解决方案2】:

    使用 KD-tree K 最近邻,过滤远离汽车的点。这就是 log N 时间复杂度。但插入树是 N*log N

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      相关资源
      最近更新 更多