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
114 lines (111 loc) • 3.77 kB
JavaScript
Object.defineProperty(exports, "__esModule", {value: true});// index.ts
var _helpers = require('@turf/helpers');
var _meta = require('@turf/meta');
function polygonSmooth(inputPolys, options) {
options = options || {};
options.iterations = options.iterations || 1;
const { iterations } = options;
const outPolys = [];
if (!inputPolys) throw new Error("inputPolys is required");
_meta.geomEach.call(void 0, inputPolys, function(geom, geomIndex, properties) {
if (geom.type === "Polygon") {
let outCoords = [[]];
for (let i = 0; i < iterations; i++) {
let tempOutput = [];
let poly = geom;
if (i > 0) {
poly = _helpers.polygon.call(void 0, outCoords).geometry;
}
processPolygon(poly, tempOutput);
outCoords = tempOutput.slice(0);
}
outPolys.push(_helpers.polygon.call(void 0, outCoords, properties));
} else if (geom.type === "MultiPolygon") {
let outCoords = [[[]]];
for (let y = 0; y < iterations; y++) {
let tempOutput = [];
let poly = geom;
if (y > 0) {
poly = _helpers.multiPolygon.call(void 0, outCoords).geometry;
}
processMultiPolygon(poly, tempOutput);
outCoords = tempOutput.slice(0);
}
outPolys.push(_helpers.multiPolygon.call(void 0, outCoords, properties));
} else {
throw new Error("geometry is invalid, must be Polygon or MultiPolygon");
}
});
return _helpers.featureCollection.call(void 0, outPolys);
}
function processPolygon(poly, tempOutput) {
var previousCoord;
var previousGeometryIndex;
_meta.coordEach.call(void 0,
poly,
function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
if (previousGeometryIndex !== geometryIndex) {
tempOutput.push([]);
} else {
var p0x = previousCoord[0];
var p0y = previousCoord[1];
var p1x = currentCoord[0];
var p1y = currentCoord[1];
tempOutput[geometryIndex].push([
0.75 * p0x + 0.25 * p1x,
0.75 * p0y + 0.25 * p1y
]);
tempOutput[geometryIndex].push([
0.25 * p0x + 0.75 * p1x,
0.25 * p0y + 0.75 * p1y
]);
}
previousCoord = currentCoord;
previousGeometryIndex = geometryIndex;
},
false
);
tempOutput.forEach(function(ring) {
ring.push(ring[0]);
});
}
function processMultiPolygon(poly, tempOutput) {
let previousCoord;
let previousMultiFeatureIndex;
let previousGeometryIndex;
_meta.coordEach.call(void 0,
poly,
function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
if (previousMultiFeatureIndex !== multiFeatureIndex) {
tempOutput.push([[]]);
} else if (previousGeometryIndex !== geometryIndex) {
tempOutput[multiFeatureIndex].push([]);
} else {
var p0x = previousCoord[0];
var p0y = previousCoord[1];
var p1x = currentCoord[0];
var p1y = currentCoord[1];
tempOutput[multiFeatureIndex][geometryIndex].push([
0.75 * p0x + 0.25 * p1x,
0.75 * p0y + 0.25 * p1y
]);
tempOutput[multiFeatureIndex][geometryIndex].push([
0.25 * p0x + 0.75 * p1x,
0.25 * p0y + 0.75 * p1y
]);
}
previousCoord = currentCoord;
previousMultiFeatureIndex = multiFeatureIndex;
previousGeometryIndex = geometryIndex;
},
false
);
tempOutput.forEach(function(poly2) {
poly2.forEach(function(ring) {
ring.push(ring[0]);
});
});
}
var turf_polygon_smooth_default = polygonSmooth;
exports.default = turf_polygon_smooth_default; exports.polygonSmooth = polygonSmooth;
//# sourceMappingURL=index.cjs.map
;