我有一组多边形区域(地理围栏)。这组数据是固定的;所以不需要插入和删除数据。哪个数据结构可用于搜索查询点(经度,纬度)所在的区域?
注意:我已成功为一组点实现了KD-Tree(实际上是一个2D树)。但它不适用于这个问题。我已经实现了一个R-Tree;它解决了问题,但速度很慢(或者我的实现很糟糕)。
谢谢
注意:我参与过R-Tree实现,现在工作正常。
答案 0 :(得分:2)
由于您没有插入/删除并且可能有足够的时间来预处理数据,因此您可以使用一些额外的内存来加速计算。预处理的基本思路:
现在,当您想要查找包含点的区域时:
这适用于展开和大多数非交叉多边形,特别是如果您可以选择足够精细的网格尺寸,以便每平方只有几个多边形。如果你碰到有很多交叉多边形的正方形,它会很慢。另一个优化是在方块上为每个列出的多边形设置一个标志,表示该方块完全包含在多边形内;这允许您在许多情况下避免慢速包容测试,代价是每个多边形条目一位。如果您的网格间距与多边形大小相比很好,这是特别有价值的,因为大多数方块不在交叉点或边缘。
如果您需要更高的速度,可以使用多边形参考开始在每个方格上存储边缘信息。您只需要测试实际上与正方形区域相交的多边形边缘。这可以减少每个多边形只进行少量边缘测试的工作量。
答案 1 :(得分:2)
R-Tree数据结构可用于解决此问题。