【问题标题】:Algorithm to discard irrelevant latitude longitude pairs [closed]丢弃不相关的纬度经度对的算法[关闭]
【发布时间】:2015-02-25 04:26:35
【问题描述】:

我正在尝试计算几个位置的最佳纬度经度对。 我有一个包含位置的数据库,对于每个位置,我可能有多个坐标。这些坐标中的大多数似乎与该位置相关,因为它们彼此相距不到 5 米。 所以我可以通过对它们求平均来得出一个新的(最终)纬度经度对。

但有时我有一个点(有时不止一个),它位于几百米外。

给定一组少数(最多 10 个)纬度经度点,我想只找到并保留那些有意义的点,而丢弃那些离其他点太远的点。

我应该使用什么方法/算法?

注意我使用 Java。

【问题讨论】:

标签: java algorithm gis


【解决方案1】:

简单的方法:

  1. 计算所有点到某个任意点的距离。
  2. 求所有点的中间距离。
  3. 丢弃所有绝对值(距离 - 中值)> 值的点。

比质心方法要好一点,因为质心方法可能会被聚集在一起的几个远点搞砸。

【讨论】:

    【解决方案2】:

    最简单的方法可能是:

    1. 找到给定点集的质心(平均长/纬度)点
    2. 计算集合中每个点到质心的距离。丢弃距离超过某个常数值的所有点(将这些点称为噪声)
    3. 从剩余的非噪声点重新计算质心,称为位置。

    这应该很容易在 java 中实现,当然可以是 O(N)N 是您集合中的点数。

    您的问题是K-means clustering 的特定情况,因为您知道哪些实际数据对应于哪些样本,而在一般情况下您不知道这些知识。因此,如果您想进行更多研究,请研究该问题和各种方法。

    【讨论】:

      【解决方案3】:

      您需要问自己几个问题:

      1. 如果您在 100 米外只有两个点,那么应该将哪个点视为“没有意义”。
      2. 如果您有两个单独的点集群,哪个点应该被视为“没有意义”?
      3. 如果您有一排连续的点仍然在计算最近邻的误差范围内,但总跨度超过限制,您应该怎么做?

      如果没有明确的标准,您提出的问题很难回答,尽管我会尝试查看聚类算法。

      如果我们跳过我提到的问题,我会说它的计算量很大,但你可以跳过

      1. 计算给定集合中所有点之间的距离
      2. 按距离总和对它们进行排序
      3. 过滤掉总和最高的那个
      4. 迭代直到没有距离总和大于 errorMargin * N-1 的点,其中 N 是当前点数。

      您仍然需要考虑边界情况,例如 1) 中提到的问题会给您留下一个随机点 - 我怀疑您对此是否满意,因此您需要仔细分析您的域。

      【讨论】:

        【解决方案4】:

        如果您使用的是 Java8,那么下面的代码提供了一个优雅的解决方案。

        Collector<Location, ?, Location> centreCollector = new CentreCollector();
        Location centre = locations.stream().collect(centreCollector);
        centre = locations.stream().filter(centre::furtherThan(NOISE_DISTANCE)).collect(centreCollector);
        

        你有 2 个东西要创建。 CentreCollector 类实现 Collector 并在 Location 对象流式传输时对其进行平均; furtherThan 方法返回一个 Predicate,该 Predicate 将this 和给定位置之间的距离与给定距离进行比较。

        稍微更优雅的方法是计算到中心距离的标准偏差,然后丢弃与平均距离超过一定标准偏差的任何位置。这将具有考虑所有或大部分样本都大于距中心的 NOISE_DISTANCE 的位置集的优势。在这种情况下,CentreCollector 将不得不返回一个更复杂的对象,该对象包含位置和统计信息,并将furtherThan 作为该类的成员而不是 Location 的成员。如果您希望我发布使用标准偏差的等效代码,请在 cmets 中告诉我。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-07
          • 2010-09-07
          • 1970-01-01
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          • 2012-07-06
          相关资源
          最近更新 更多