4

我在我的应用程序中使用Turf.js进行高级地理空间分析,但找不到检查两个多边形是否相互交叉的方法。Intersect方法不是我想要的,因为如果我有一个小多边形并且想要找到穿过这个小多边形的多边形,这个方法将返回包含这个较小多边形的大重叠多边形。

让我从视觉上解释一下。所以,这是我拥有的多边形:

在此处输入图像描述

在这种情况下,多边形彼此相交:

在此处输入图像描述

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

在此处输入图像描述

在最后一种情况下,绿色多边形的边界不与较小的多边形相交,因此它们不相交。

而我的问题是,是否可以在 Turf.js 中实现这种交集函数?

4

4 回答 4

2

您只需要检查红色多边形是否包含绿色多边形,如果它是真的,则将交集设置为假。

于 2021-02-12T08:21:19.557 回答
0
const poly1 = turf.polygon(polygon1)
const poly2 = turf.polygon(polygon2)
intersected = turf.booleanWithin(poly1, poly2)

如果 poly1 {在你的情况下是红色多边形}完全在 poly2 {在你的情况下是绿色多边形},它将返回 true。如果它们只是相交并且不包含父多边形,那么它将返回 false。

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

于 2021-10-08T10:17:56.497 回答
0

你可以另外检查这个 turf.booleanContains(poly1, poly2)

于 2021-08-23T11:30:44.977 回答
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


于 2022-01-06T17:42:16.190 回答