【问题标题】:Check if one polygon crosses another polygon in Turf.js检查一个多边形是否与 Turf.js 中的另一个多边形相交
【发布时间】:2018-03-09 03:48:23
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 只有当它们的周长相互交叉时,你才认为它是交叉点...我认为红色实际上与绿色交叉点...
  • 在我的情况下,这两个多边形是不等价的。我使用红色的作为选择工具,并希望找到与该选择区域相交的所有多边形。根据用户要求,包含这个较小多边形(用于选择)的较大多边形不要相交
  • 虽然,可能在较新版本的 Turf.js 中 booleanCrosses 可以解决问题

标签: javascript geospatial turfjs


【解决方案1】:

适用于寻求解决此问题的任何人。 您可以使用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


【讨论】:

    【解决方案2】:
    const poly1 = turf.polygon(polygon1)
    const poly2 = turf.polygon(polygon2)
    intersected = turf.booleanWithin(poly1, poly2)
    

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

    查看This turf doc了解更多详情

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你只需要检查红色多边形是否包含绿色多边形,如果是真的就把交集设置为假。

        【讨论】:

          猜你喜欢
          • 2019-08-23
          • 1970-01-01
          • 2018-08-24
          • 2014-01-24
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多