2D数据的最快空间索引,一旦构建,就没有更新

时间:2011-11-16 13:03:13

标签: c# algorithm indexing geospatial spatial

  • 我有大型2D对象集合,现在只有行。
  • 我需要算法建议如何创建最快的空间索引 这个集合,以便我可以收集一些内部的所有对象 界限。
  • 一旦建成索引将不会更新。
  • 此数据库中的对象分布在空间上不统一。
  • C#中的算法实现。
  • 更新:当前用途是针对某个国家/地区的路线图,因此线路较小,从一个十字路口到另一个十字路口,人口密集区域的密度较大。我认为这可以很好地了解数据。

显然有很多索引方法可以实现这一点,但我需要一个最快的方法。

4 个答案:

答案 0 :(得分:1)

如果您想保存二维线路,并且您的查询是二维范围查询,则可以使用 Segment Tree

查询的算法复杂度为O(log ^ 2 N)。

答案 1 :(得分:1)

检查四叉树....和DotSpatial以进行空间类型处理,包括四叉树实现。

答案 2 :(得分:1)

您还可以尝试R-treehttp://sourceforge.net/projects/cspatialindexrt/提供了一个C#实现。

R-tree应该具有Segment Tree的性能,并且上面的实现应该是独立的,并且相当独立于许多额外的代码引用,但我还没有对它进行测试。

答案 3 :(得分:0)

这没有银弹。它取决于数据的类型(即,仅点,仅线,三角形,网格,它们的任意组合等)和查询的类型(面内的点,线相交,最近的邻居,圆内的任何几何形状或框等)。

您有一个为特定类型的查询和数据设计的数据结构。如果要对所有类型的查询和所有类型的数据使用单个数据结构,则必须权衡空间或时间或两者兼而有之。您可以采取相当快的方法,但通常不会达到最佳状态。

根据我的经验,一个足以应付大多数几何对象并可以处理多种类型查询的数据结构,我建议使用AABB-Tree:

https://doc.cgal.org/latest/AABB_tree/index.html

相关问题