如何从一组具有固定位置的多边形中选择最小数量的多边形,其联合覆盖输入多边形?
例如,让我们考虑以下输入,其中绿色多边形是查询集,蓝色是查询:
正确的覆盖将有两个多边形:
如何计算哪些多边形最有效地覆盖输入区域(最小化所选多边形的数量)?
答案 0 :(得分:0)
似乎给出正确结果的解决方案如下:
将所有多边形剪切到查询区域
将每个剪裁的多边形与其他任何相交的多边形分开,消除任何重复 - 让我们将此操作称为“斩波”。例如,此类操作将生成以下非重叠多边形:
从以下多边形(按范围裁剪):
所有切碎的多边形代表集合覆盖术语中的宇宙;由单个修剪的覆盖多边形覆盖的切碎多边形表示子集
预先选择与其他多边形并集完全覆盖的多边形对应的所有子集。
使用近似算法查找最小集合覆盖(如here所述)
我使用GeoTools实现了这一点。这是代码:https://github.com/w-k/MinimalCoverage,可以从这里下载带有jar和依赖项的存档:https://github.com/w-k/MinimalCoverage/releases。
我的基础是Ante的答案,这个答案非常有价值,但没有提供正确的解决方案。这是不正确的,因为满足了覆盖所有交叉点部分的要求,导致查询多边形的过度覆盖。例如,由范围多边形修剪的封面多边形(如上图所示)产生以下公共部分:
为了覆盖所有常见部分,我们必须选择所有三个覆盖多边形(中间公共部分不完全被最左边和最右边的多边形覆盖)。