繁体   English   中英

检查一个多边形是否与 Turf.js 中的另一个多边形相交

[英]Check if one polygon crosses another polygon in Turf.js

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

让我直观地解释一下。 所以,这是多边形,我有:

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

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

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

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

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

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

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

对于任何正在寻找解决此问题的方法的人。 您可以使用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


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM