我有一组区域(地理栅栏),它们是多边形。这组数据是固定的,因此不需要插入和删除数据。哪种数据结构可用于搜索查询点(经度、纬度)所在的区域?
注意:我已经成功地为一组点实现了KD-Tree (实际上是2D-Tree)。但它对这个问题不起作用。我已经实现了一个R-Tree,它解决了这个问题,但速度很慢(或者我的实现很糟糕)。
谢谢
注意:我一直致力于R-Tree的实现,现在它工作得很好。
发布于 2011-11-16 22:21:38
可以使用R-Tree数据结构来解决此问题。
发布于 2011-11-08 17:25:10
由于您不会插入/删除数据,并且可能有足够的时间对数据进行预处理,因此可以使用一些额外的内存来加快计算速度。预处理的基本思想:
现在,当您想要查找包含点的区域时:
这对于分散且大多数不相交的多边形很有效,特别是如果您可以选择足够精细的栅格大小,以便每个正方形只有几个多边形。当你击中有许多相交多边形的正方形时,它将变得很慢。一种额外的优化是在正方形处为每个列出的多边形设置一个标志,以指示该正方形完全包含在多边形内;这允许您在许多情况下避免缓慢的包含测试,代价是每个多边形条目只有一位。如果栅格间距与多边形大小相比是很好的,这是特别有价值的,因为大多数正方形不会位于交叉点或边上。
如果需要更快的速度,可以开始在具有多边形引用的每个方块中存储边信息。您只需要针对实际与正方形区域相交的多边形边进行测试。这可以将工作量减少到每个多边形仅进行少量的边缘测试。
https://stackoverflow.com/questions/8049693
复制