Indexing 插入/更新/删除和搜索二维点的最佳数据结构

Indexing 插入/更新/删除和搜索二维点的最佳数据结构,indexing,data-structures,webgl,Indexing,Data Structures,Webgl,我有一个用于GIS地图上的大型实体的基础设施——使用图形绘制卡(WebGL) 今天,我将使用四叉树对数据进行索引和查询-用于选择/绘制目的 最近,我发现了一种方法,可以让我的用户更新实体的位置并快速绘制更改。例如,更新15000个位置并重新绘制所需时间少于0.05毫秒 现在的问题是更新我的数据结构。它非常非常慢 我已经看过很多数据结构,比如R树、B树等等。。但尚未找到令人满意的结果 我的问题是 从性能角度来看,用于插入/更新和查询(按与点的距离、矩形)的2d点的最佳数据结构是什么 也许有一个we

我有一个用于GIS地图上的大型实体的基础设施——使用图形绘制卡(WebGL)

今天,我将使用四叉树对数据进行索引和查询-用于选择/绘制目的

最近,我发现了一种方法,可以让我的用户更新实体的位置并快速绘制更改。例如,更新15000个位置并重新绘制所需时间少于0.05毫秒

现在的问题是更新我的数据结构。它非常非常慢

我已经看过很多数据结构,比如R树、B树等等。。但尚未找到令人满意的结果

我的问题是

从性能角度来看,用于插入/更新和查询(按与点的距离、矩形)的2d点的最佳数据结构是什么

也许有一个web gl解决方案可以解决这个问题

从性能上看,2d点的最佳数据结构是什么 视角,用于插入/更新和查询(按距离) 点(矩形)

很难找到满足所有这些要求的数据结构。通常情况下,搜索速度越快,插入速度就越慢,插入速度越快,搜索速度就越慢,所以这是一种平衡

然而,考虑到您的需要,一个简单的NxM网格实际上可能是理想的。我最初来自一个游戏背景,在那里精灵可以在每一帧上移动。四叉树对于希望在每一帧更新结构的动态内容来说往往过于昂贵。因此,简单的NxM网格通常更适合这些情况

NxM网格可能比四叉树更快地执行矩形查询,因为它只需确定哪些网格单元与矩形重叠,然后简单地检查单元内的元素,以查看重叠/是否在矩形内。径向参数(圆)内的搜索也是如此

插入和删除非常便宜,因为我们只需要更新元素重叠的单元。如果你在处理点,一个点只属于一个单元格,它变成了一个非常简单的常数时间运算。事实上,如果每个点为下一个元素存储一个列表指针,那么将其从一个单元格移动到另一个单元格(同时将其从单元格中删除并插入到单元格中)只需要更改周围的指针,而不需要内存分配。然后,该网格将成为单链接列表的头指针网格


另一种方法是,我想象你目前正在为整个世界使用一个巨大的四叉树。通过使用四叉树表示一个小区域,可以使用这些技术的混合,例如,将四叉树平铺在一起以形成四叉树网格。这可以显著降低为特定区域更新四叉树的成本,因为每个四叉树只存储该区域的数据。

是否有四叉树深度表示的LOD系统?或者它是纯2d?尝试一个简单的统一哈希网格。与任何基于树的结构中的O(logn)相反,它有O(1)个insert/delete。如果您提供的数据的平铺大小合理,查询也是O(c)。我的四叉树是纯单LOD@WacławJasper谢谢你的提示。我将尝试更新结果