javascript 是否可以使用草皮创建多多边形遮罩?

vjhs03f7  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(144)

我尝试使用另一个多面创建多面区域的掩膜,示例如下http://turfjs.org/docs/#mask
由于:

masked = turf.mask(multiPolygon1, multiPolygon2);

我得到错误:

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

这可能吗?

dfuffjeb

dfuffjeb1#

mask API不接受MultiPolygon作为其第二个参数。(http://turfjs.org/docs/#mask)您只能传递一个Polygon。
变通解决方案是:
1.将“多重多边形”遮罩分割为多边形阵列。
1.然后为数组中的每个Polygon循环调用mask(),将该Polygon传递给第二个参数,并将结果保存在变量中。
1.在第二个循环中,使用intersect()将步骤2中的所有掩码结果合并为一个结果。

qxgroojn

qxgroojn2#

我就是这么做的。

import {mask, polygon, union} from '@turf/turf';

function maskWithMultipolygon(singlePolygon, multiPolygon) {
  const maskedResult = multiPolygon.geometry.coordinates.map(coords => {
    let singlePolygonMask = polygon(coords);
    return mask(singlePolygon, singlePolygonMask);
  });
  let maskResultPolygon = maskedResult[0];
  if (maskedResult.length > 1) {
    for (let i = 1; i < maskedResult.length; i++) {
      let previousResult = cloneDeep(maskResultPolygon);
      maskResultPolygon = union(previousResult, maskedResult[i]);
    }
  }
  return maskResultPolygon;
}

相关问题