我有一个中等大面积(几十平方公里),可以包含数千个物体。大多数物体很小,一平方米,因此它们几乎可以被认为是点。但是,有些物体非常大,与整个区域的数量级相同。
我想对这些对象执行一些简单的空间查询(例如“查找与此矩形重叠的所有对象”)。我一直在玩R树,这似乎对小物体有效。但是,一旦我包含较大的物体,我不确定R树是否仍然是最佳选择。
所以问题是:这里哪种空间指数最合适?如果有一个Java实现具有快速添加/删除对象的功能,则可以获得奖励。
答案 0 :(得分:2)
如果您正在寻找空间索引的特定于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
上的空间数据索引部分答案 1 :(得分:0)