算法 - 在地图上分组位置

时间:2017-09-17 06:27:43

标签: algorithm cluster-analysis geospatial

我有一个n个位置的列表,每个位置包括纬度,经度和时间戳。这些位置将固定在地图上。

但是,需要将最近更改位置作为中心的位置组合在一起,以便地图不会被引脚淹没。

我最初的想法是:

  1. 按时间戳排序地点
  2. 选择最新位置
  3. 计算到n-1个地点的最新位置的距离
  4. 选择半径范围内的那些位置,例如5公里,然后从列表中删除它们
  5. 重复步骤2-4
  6. 此方法有效,但效率非常低。最坏的情况是~O(n ^ 2)。

    有没有更好的算法?

2 个答案:

答案 0 :(得分:0)

要超越二次运行时,请使用索引。

在纬度和经度上,您可能想要使用R树,球树,封面树或类似物,因为kd树显然只适用于欧几里德距离,而不是半影。

答案 1 :(得分:0)

我有一个针对你的hacky解决方案,如果你对大概答案没问题,可能会有效。

通常纬度经度会超过几个小数点,如(12.9877949,77.6095064)。现在,您只能在小数点后选择几位数,通常在几公里范围内。

如12.9877979,77.6095054更接近12.9877949,77.6095064所以如果我只拿到2小数点,它们将变成12.98,77.60现在我通过列表并选择具有相同值的那些。

如果您需要非常精确的计算

,这将无法工作