import * as turf from "@turf/turf"; /** * Converts an array of canvas-compatible points into a Turf.js Polygon. * * @param {{x: number, y: number}[]} points - Array of points with x and y properties. * * @returns {import('@turf/turf').Feature | null} A Turf.js Polygon feature, or null if input is invalid. */ export function toTurfPolygon(points) { if (!points || points.length < 3) { console.error("Invalid input for polygon:", points); return null; } const coords = points.map(p => [p.y, p.x]); coords.push(coords[0]); return turf.polygon([coords]); } /** * Merges two polygons (in canvas format) into a single Turf.js polygon using turf.union. * * @param {{x: number, y: number}[]} polygonA - First polygon (array of points). * @param {{x: number, y: number}[]} polygonB - Second polygon (array of points). * * @returns {import('@turf/turf').Feature | null} A merged Turf.js polygon, or null on failure. */ export function mergeTurfPolygons(polygonA, polygonB) { const turfPolygonA = toTurfPolygon(polygonA); const turfPolygonB = toTurfPolygon(polygonB); return turf.union(turf.featureCollection([turfPolygonA, turfPolygonB])); } /** * Adds a new polygon to an existing merged Turf.js polygon. * * @param {import('@turf/turf').Feature} polygonA - Existing merged Turf.js polygon. * @param {{x: number, y: number}[]} polygonB - New polygon in canvas point format to add to the merge. * * @returns {import('@turf/turf').Feature} Updated merged Turf.js polygon. */ export function addTurfPolygonToMerge(polygonA, polygonB) { const testB = toTurfPolygon(polygonB); return turf.union(turf.featureCollection([polygonA, testB])); } /** * @param {{x: number, y: number}[][]} polygons * @returns {Feature} */ export function mergePolygons(polygons) { if (!polygons || polygons.length === 0) return undefined; if (polygons.length === 1) return toTurfPolygon(polygons[0]); return turf.union(turf.featureCollection(polygons.map(p => toTurfPolygon(p)))); } /** * * @param {Array>|undefined} features * @returns {Feature|undefined|*} */ export function mergePolygonFeatures(features) { if (!features || features.length === 0) return undefined; if (features.length === 1) return features[0]; console.log("3" + features.length) return turf.union(turf.featureCollection(features)); }