我有一个中等大的区域(几十平方公里),可以包含数千个对象。大多数物体都很小,一平方米,所以它们几乎可以被认为是点。但是,有些物体非常大,高达与整个区域相同的数量级。
我想对这些对象执行一些简单的空间查询(例如“查找与此矩形重叠的所有对象”)。我一直在玩 R-trees,这似乎对小物体很有效。但是我不确定一旦包含较大的对象,R-tree 是否仍然是最佳选择。
所以问题是:什么样的空间索引在这里最合适?如果有一个具有快速添加/删除对象的 Java 实现,则可以加分。
我有一个中等大的区域(几十平方公里),可以包含数千个对象。大多数物体都很小,一平方米,所以它们几乎可以被认为是点。但是,有些物体非常大,高达与整个区域相同的数量级。
我想对这些对象执行一些简单的空间查询(例如“查找与此矩形重叠的所有对象”)。我一直在玩 R-trees,这似乎对小物体很有效。但是我不确定一旦包含较大的对象,R-tree 是否仍然是最佳选择。
所以问题是:什么样的空间索引在这里最合适?如果有一个具有快速添加/删除对象的 Java 实现,则可以加分。
如果您正在寻找空间索引的 java 特定实现,JTS库是相当轻量级的,并提供了两个空间索引实现: QuadTree和STRTree。STRTree 只是 R-Tree 的特定空间优化实现。由于它们的层次结构,两种方法(QuadTree 和 R-Tree)都支持从小到大的不同规模的对象。
R-Tree 的一个限制是插入很困难(JTS 实现不允许插入),因为索引层次结构由数据决定,并且在插入数据时可能需要更改,而四叉树层次结构是固定的数据是如何分布的。这可能会影响您的实现,而不是功能大小。
Oracle Spatial 文档提供了有关在特定情况下哪种类型的空间索引最有效的详细信息,尽管其中一些是特定于 Oracle DB 的。请参阅http://docs.oracle.com/html/A88805_01/sdo_intr.htm上的空间数据索引部分