是否可以使用草皮创建多边形蒙版?

问题描述 投票:0回答:2

我正在尝试使用此示例使用另一个 MultiPolygon 为 MultiPolygon 区域创建掩码http://turfjs.org/docs/#mask

由于:

masked = turf.mask(multiPolygon1, multiPolygon2);

我得到错误:

npmcdn.com/@turf/[email protected]/turf.min.js:18 Uncaught TypeError: Cannot read property 'coordinates' of undefined
    at s (https://npmcdn.com/@turf/[email protected]/turf.min.js:18:24640)

这可能吗?

javascript mapbox-gl turfjs
2个回答
1
投票

mask API 的第二个参数不接受 MultiPolygon。 ( http://turfjs.org/docs/#mask ) 你只能传递一个多边形。

解决方法是:

  1. 将您的 MultiPolygon 蒙版拆分为多边形数组。
  2. 然后循环调用数组中的每个多边形调用 mask() 将该多边形传递给第二个参数,并将结果保存在变量中。
  3. 在第二个循环中,使用 intersect() 将步骤 2 中的所有掩码结果合并为一个结果。

0
投票

我就是这样做的。

geometry
可以是 Polygon 或 MultiPolygon 类型,而
cover
必须是 MultiPolygon 类型。

function maskWithMultipolygon(geometry, cover) {
    let allMasks = [];
    const coords = turf.getCoords(cover);

    coords.forEach(function(polyCoords) {
        let singlePolygon = turf.polygon(polyCoords);
        let maskedPoly = turf.mask(geometry, singlePolygon)
        allMasks.push(maskedPoly)
     })

      const union = allMasks.reduce((a, b) => union(a, b), allMasks[0]);
      return union;
}
© www.soinside.com 2019 - 2024. All rights reserved.