在 turfjs 中创建多个多边形联合的最快方法是什么?

What is the fastest way to create a union of many polygons in turfjs?

我有这样的东西,但是对于大集合它非常慢:

    let unionize = (triangles) => {
        if(triangles.length == 0) {
            return null
        }

        let ret = triangles[0].feature

        triangles.forEach((t, index) => {
            if(index > 0) {
                ret = turf.union(t, t)
            }
        })

        return ret
    }

featureEach 往往比普通数组 forEach 更快,尽管具有更多功能增益会降低。

<script src="https://cdn.jsdelivr.net/npm/@turf/turf@5.1.6/turf.min.js"></script>
<script>
    const generateGrid = (cellSide = 100, units = "kilometers") => {
        const bbox = [-95, 30, -85, 40];

        return turf.triangleGrid(bbox, cellSide, {
            units
        });
    }

    const unionizeForEach = (triangles) => {
        console.time('unionizeForEach');
        if (triangles.length == 0) {
            return null
        }

        let ret = triangles[0];

        triangles.forEach((t, index) => {
            if (index > 0) {
                ret = turf.union(ret, t)
            }
        });

        console.timeEnd('unionizeForEach');
        return ret
    }

    const unionizeFeatureEach = (triangles) => {
        console.time('unionizeFeatureEach');
        if (triangles.features.length === 0) {
            return null
        }

        let ret = triangles.features[0];

        turf.featureEach(triangles, function (currentFeature, featureIndex) {
            if (featureIndex > 0) {
                ret = turf.union(ret, currentFeature)
            }
        });

        console.timeEnd('unionizeFeatureEach');
        return ret;
    }

    [100, 50, 10].map(cellSide => {
        const triangleGrid = generateGrid(cellSide, 'kilometers');
        console.info(`triangleGrid has ${triangleGrid.features.length} features`);

        const union_foreach = unionizeForEach(triangleGrid.features);
        const union_featureeach = unionizeFeatureEach(triangleGrid);

        console.assert(JSON.stringify(union_foreach) === JSON.stringify(union_featureeach));
        console.log('\n---\n');
    })
</script>