在固定位置覆盖具有最小数量的重叠多边形的多边形

时间:2015-07-29 13:16:49

标签: polygon geospatial computational-geometry combinatorics

如何从一组具有固定位置的多边形中选择最小数量的多边形,其联合覆盖输入多边形?

例如,让我们考虑以下输入,其中绿色多边形是查询集,蓝色是查询:

Input and Query

正确的覆盖将有两个多边形:

Expected Result

如何计算哪些多边形最有效地覆盖输入区域(最小化所选多边形的数量)?

1 个答案:

答案 0 :(得分:0)

似乎给出正确结果的解决方案如下:

  1. 将所有多边形剪切到查询区域

  2. 将每个剪裁的多边形与其他任何相交的多边形分开,消除任何重复 - 让我们将此操作称为“斩波”。例如,此类操作将生成以下非重叠多边形:

  3. enter image description here

    从以下多边形(按范围裁剪):

    enter image description here

    1. 所有切碎的多边形代表集合覆盖术语中的宇宙;由单个修剪的覆盖多边形覆盖的切碎多边形表示子集

    2. 预先选择与其他多边形并集完全覆盖的多边形对应的所有子集。

    3. 使用近似算法查找最小集合覆盖(如here所述)

    4. 我使用GeoTools实现了这一点。这是代码:https://github.com/w-k/MinimalCoverage,可以从这里下载带有jar和依赖项的存档:https://github.com/w-k/MinimalCoverage/releases

      我的基础是Ante的答案,这个答案非常有价值,但没有提供正确的解决方案。这是不正确的,因为满足了覆盖所有交叉点部分的要求,导致查询多边形的过度覆盖。例如,由范围多边形修剪的封面多边形(如上图所示)产生以下公共部分:

      enter image description here

      enter image description here

      enter image description here

      为了覆盖所有常见部分,我们必须选择所有三个覆盖多边形(中间公共部分不完全被最左边和最右边的多边形覆盖)。