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
61 lines (58 loc) • 2.02 kB
JavaScript
Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// index.ts
var _earcut = require('earcut'); var _earcut2 = _interopRequireDefault(_earcut);
var _helpers = require('@turf/helpers');
function tesselate(poly) {
if (!poly.geometry || poly.geometry.type !== "Polygon" && poly.geometry.type !== "MultiPolygon") {
throw new Error("input must be a Polygon or MultiPolygon");
}
const fc = {
type: "FeatureCollection",
features: []
};
if (poly.geometry.type === "Polygon") {
fc.features = processPolygon(poly.geometry.coordinates);
} else {
poly.geometry.coordinates.forEach(function(coordinates) {
fc.features = fc.features.concat(processPolygon(coordinates));
});
}
return fc;
}
function processPolygon(coordinates) {
const data = flattenCoords(coordinates);
const dim = 2;
const result = _earcut2.default.call(void 0, data.vertices, data.holes, dim);
const features = [];
const vertices = [];
result.forEach(function(vert, i2) {
const index = result[i2];
vertices.push([data.vertices[index * dim], data.vertices[index * dim + 1]]);
});
for (var i = 0; i < vertices.length; i += 3) {
const coords = vertices.slice(i, i + 3);
coords.push(vertices[i]);
features.push(_helpers.polygon.call(void 0, [coords]));
}
return features;
}
function flattenCoords(data) {
const dim = data[0][0].length, result = {
vertices: [],
holes: [],
dimensions: dim
};
let holeIndex = 0;
for (let i = 0; i < data.length; i++) {
for (let j = 0; j < data[i].length; j++) {
for (let d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);
}
if (i > 0) {
holeIndex += data[i - 1].length;
result.holes.push(holeIndex);
}
}
return result;
}
var turf_tesselate_default = tesselate;
exports.default = turf_tesselate_default; exports.tesselate = tesselate;
//# sourceMappingURL=index.cjs.map
;