node-red-contrib-tak-registration
Version:
A Node-RED node to register to TAK and to help wrap files as datapackages to send to TAK
70 lines • 1.92 kB
JavaScript
// index.ts
import { polygon as createPolygon, multiPolygon } from "@turf/helpers";
import * as polyclip from "polyclip-ts";
import { clone } from "@turf/clone";
function mask(polygon, mask2, options) {
var _a;
const mutate = (_a = options == null ? void 0 : options.mutate) != null ? _a : false;
let maskTemplate = mask2;
if (mask2 && mutate === false) {
maskTemplate = clone(mask2);
}
const maskPolygon = createMask(maskTemplate);
let polygonOuters = null;
if (polygon.type === "FeatureCollection") {
polygonOuters = unionFc(polygon);
} else if (polygon.type === "Feature") {
polygonOuters = createGeomFromPolygonClippingOutput(
polyclip.union(polygon.geometry.coordinates)
);
} else {
polygonOuters = createGeomFromPolygonClippingOutput(
polyclip.union(polygon.coordinates)
);
}
polygonOuters.geometry.coordinates.forEach(function(contour) {
maskPolygon.geometry.coordinates.push(contour[0]);
});
return maskPolygon;
}
function unionFc(fc) {
const unioned = fc.features.length === 2 ? polyclip.union(
fc.features[0].geometry.coordinates,
fc.features[1].geometry.coordinates
) : polyclip.union.apply(
polyclip,
fc.features.map(function(f) {
return f.geometry.coordinates;
})
);
return createGeomFromPolygonClippingOutput(unioned);
}
function createGeomFromPolygonClippingOutput(unioned) {
return multiPolygon(unioned);
}
function createMask(mask2) {
const world = [
[
[180, 90],
[-180, 90],
[-180, -90],
[180, -90],
[180, 90]
]
];
let coordinates = world;
if (mask2) {
if (mask2.type === "Feature") {
coordinates = mask2.geometry.coordinates;
} else {
coordinates = mask2.coordinates;
}
}
return createPolygon(coordinates);
}
var turf_mask_default = mask;
export {
turf_mask_default as default,
mask
};
//# sourceMappingURL=index.js.map