我有大量的点数据流(2D)(每秒数千)。在这张地图上,我有几个固定的多边形(数十到几百个)。
我想为它所在的多边形(多边形可以相交)的每个点实时确定(相当强大的笔记本电脑上几毫秒的顺序)。 我以为我会使用ray casting algorithm。
然而,我需要一种预处理数据的方法,以避免扫描每个多边形。 因此,我考虑使用树方法(PM quadtree或Rtree?)。还有其他相关方法吗? 你会推荐一个很好的PM四叉树实现(用什么语言,最好是C(++),Java或Python)?
答案 0 :(得分:1)
我在Java中开发了一个包含多个多维索引的库,可以找到它here。它包含R * Tree,STR-Tree,4个四叉树(2个用于点,2个用于矩形)和一个Critbit树(可以通过交错坐标用于空间数据)。我还开发了PH-Tree。
有所有基于矩形/点的树,因此您必须将多边形转换为矩形,例如通过计算边界框。对于所有返回的边界框,如果多边形确实与您的点相交,则必须手动计算。 如果您的矩形不是太长,这应该仍然有效。
我通常发现PH树是最有效的树,如果一个点与100个或更小的矩形相交(甚至更好,10或更小),它具有快速的构建时间和非常快的查询时间。较大的重叠尺寸(1000+),STR / R * -trees更好。四叉树有点不可靠,当插入数百万个元素时,它们在数值精度方面存在问题。
假设一个3D树有100万个矩形,平均每个查询一个结果,PH-Tree在我的桌面上每个查询需要大约3微秒(i7 4xxx),即每毫秒300个查询。