【问题标题】:What is the best data structure to store distance sensitive spatial data?存储距离敏感空间数据的最佳数据结构是什么?
【发布时间】:2015-12-23 06:38:23
【问题描述】:

假设我有关于气象站坐标​​、历史温度值和全球市中心坐标的数据。气象站与市中心的距离不同。任务是通过气象站数据确定城市平均温度历史值。

为了解决每个城市的问题,我需要在某个半径范围内找到一组最近的气象站,并对它们的数据进行平均。蛮力的方法是计算每个城市到每个气象站的距离,但对于我的数据来说太慢了。所以我认为一些树数据结构可以在这里提供帮助。我尝试使用 R-trees 按坐标划分气象站,但存在一个问题 - 这种方法允许我在某个树节点中找到气象站,但它没有给我有关相邻节点的信息,以便快速计算半径条件(例如,如果 city 非常靠近 R-tree 的节点边界)。

是否有标准的树数据结构,既可以快速搜索所需节点,又可以提供同一树级别的空间邻居集?

【问题讨论】:

  • R-tree确实允许半径搜索以及最近邻,所以它应该很合适。

标签: algorithm geospatial spatial spatial-index r-tree


【解决方案1】:

您可能不应该担心“同一级别的邻居”等,这些信息并不一定意味着什么。我想你应该可能

  1. 决定是想要给定距离内的所有气象站(范围查询)还是最近的 k 个气象站。
  2. 那么我将只使用您正在使用的索引的 API 来查找电台。
  3. 然后计算距离。

R-Trees 对此没问题,但它们的加载速度通常很慢。如果加载时间有问题,您可能想尝试 R+tree、R*tree 或 Quadtrees(用于小型数据集)或 PH-Tree(用于大型数据集,我在 Java 中的实现)。

数据在树中的组织方式不应成为问题。曾经实施过这棵树的人可能实施了寻找所需邻居的最有效方法。

【讨论】:

    【解决方案2】:

    使用数据库怎么样?然后查询它以找到接近某个特定点的点?许多数据库已经支持地理空间数据,您可以对其进行索引和查询:

    【讨论】:

    • 正如我在文档中看到的,索引也是基于 R-trees 的,所以似乎 DB 会遇到和我一样的问题。
    • @user3231055 你的陈述看起来很有趣。很可能你做错了什么/没有正确实现 r-tree,没有以正确的方式使用数据。因为这些数据库已经使用了多年,并且没有很多人声称他们有一些问题。
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多