在 Turf.js 中检测一个多边形是否穿过另一个多边形

5
我正在使用 Turf.js 进行高级地理空间分析,但找不到一个检查两个多边形是否相交的方法。Intersect 方法不是我想要的,因为如果我有一个小多边形,并且想要找到与此小多边形相交的多边形,该方法将返回包含此较小多边形的大重叠多边形。
让我用图示进行解释。这是我拥有的多边形:

enter image description here

在这种情况下,多边形相互交叉:

enter image description here

在这种情况下,我认为它们不相交:

enter image description here

在最后一个案例中,绿色多边形的边界没有穿过较小的多边形,因此它们不相交。
我的问题是,是否可以在Turf.js中实现这种交集函数?

只有当它们的周长互相交叉时,您才认为它们是相交的...我觉得红色实际上正在与绿色相交... - Hitmands
这可能会有所帮助 https://dev59.com/E5Dea4cB1Zd3GeqPivFI - Hitmands
显然,这不是一个重复的问题,因为即使是被接受的提问者也说:“最终,turfjs似乎没有用于执行此操作的API。” - Jacobian
1
虽然在 Turf.js 的新版本中,booleanCrosses 可能会解决这个问题。 - Jacobian
我刚才想到你最终会得出相同的结论。 - Hitmands
显示剩余2条评论
4个回答

3

您只需要检查红色多边形是否包含在绿色多边形中,如果是,则将交集设置为false。


0

对于任何想要解决这个问题的人, 你可以使用booleanOverlap来确定两个多边形是否相交。

const p0 = turf.polygon([[
  [0, 0],
  [0, 1],
  [1, 1],
  [1, 0],
  [0, 0]
]]);

const p1 = turf.polygon([[
  [0, 0],
  [0, 2],
  [0.5, 2],
  [0.5, 0],
  [0, 0]
]])

const p2 = turf.polygon([[
  [-2, -2],
  [-2, 2],
  [2, 2],
  [2, -2],
  [-2, -2]
]])

const p3 = turf.polygon([[
  [10, 10],
  [10, 11],
  [11, 11],
  [12, 12],
  [11, 10],
  [10, 10]
]]);

console.log(turf.booleanOverlap(p0, p0)); // false
console.log(turf.booleanOverlap(p0, p1)); // ture
console.log(turf.booleanOverlap(p0, p2)); // false
console.log(turf.booleanOverlap(p0, p3)); // false



0
const poly1 = turf.polygon(polygon1)
const poly2 = turf.polygon(polygon2)
intersected = turf.booleanWithin(poly1, poly2)

如果poly1(在您的情况下为红色多边形)完全位于poly2(在您的情况下为绿色多边形)内部,则它将返回true。如果它们只是相交但不被父多边形包含,则它将返回false。

查看此turf文档以获取更多详细信息


0
你可以额外检查这个代码: turf.booleanContains(poly1, poly2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接