我正在使用openstreetmap中的geodata(country-size)。建筑物通常是没有住宅数字的多边形,并且房屋编号的单个点位于建筑物的多边形内。建筑物可能有多个住宅号。
我希望将住宅数量与建筑物的多边形相匹配。
Foreach housenumber使用每个建筑物多边形执行多边形点测试。
对于大约50,000,000个建筑物和10,000,000个地址点来说太慢了。
构建多边形的构建和索引,以加速搜索每个housenumber-point的周围多边形。
您会为此多边形结构推荐哪种指数或策略?多边形从不重叠,区域被稀疏覆盖。
此问题与gis.stackexchange.com重复。建议在那里发布问题。
答案 0 :(得分:1)
由于听起来你有很好的多边形要测试,我会使用带有AABB检查的空间散列,然后最后使用完整的多边形点测试。希望在这一点上,您将为每个地址平均三个或更少的多边形点测试。
这有几个好处:
当然,网格作为空间结构的常见缺点是:
假设您最终在每个网格中都有N
个最大多边形,并且每个多边形都有P
个点,并且您拥有B
个建筑物和A
个地址,你在看O(B*P + N*A)
。由于B
和P
可能相对较小,特别是平均而言,您可以考虑这个O(B + N)
- 非常线性。