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
158 lines (145 loc) • 5.08 kB
JavaScript
Object.defineProperty(exports, "__esModule", {value: true});// index.ts
var _helpers = require('@turf/helpers');
function randomPosition(bbox) {
checkBBox(bbox);
return randomPositionUnchecked(bbox);
}
function randomPositionUnchecked(bbox) {
if (Array.isArray(bbox)) {
return coordInBBox(bbox);
}
if (bbox && bbox.bbox) {
return coordInBBox(bbox.bbox);
}
return [lon(), lat()];
}
function checkBBox(bbox) {
if (bbox == null) {
return;
} else if (Array.isArray(bbox)) {
_helpers.validateBBox.call(void 0, bbox);
} else if (bbox.bbox != null) {
_helpers.validateBBox.call(void 0, bbox.bbox);
}
}
function randomPoint(count, options = {}) {
checkBBox(options.bbox);
if (count === void 0 || count === null) {
count = 1;
}
const features = [];
for (let i = 0; i < count; i++) {
features.push(_helpers.point.call(void 0, randomPositionUnchecked(options.bbox)));
}
return _helpers.featureCollection.call(void 0, features);
}
function randomPolygon(count, options = {}) {
checkBBox(options.bbox);
if (count === void 0 || count === null) {
count = 1;
}
if (options.bbox === void 0 || options.bbox === null) {
options.bbox = [-180, -90, 180, 90];
}
if (!_helpers.isNumber.call(void 0, options.num_vertices) || options.num_vertices === void 0) {
options.num_vertices = 10;
}
if (!_helpers.isNumber.call(void 0, options.max_radial_length) || options.max_radial_length === void 0) {
options.max_radial_length = 10;
}
const bboxWidth = Math.abs(options.bbox[0] - options.bbox[2]);
const bboxHeight = Math.abs(options.bbox[1] - options.bbox[3]);
const maxRadius = Math.min(bboxWidth / 2, bboxHeight / 2);
if (options.max_radial_length > maxRadius) {
throw new Error("max_radial_length is greater than the radius of the bbox");
}
const paddedBbox = [
options.bbox[0] + options.max_radial_length,
options.bbox[1] + options.max_radial_length,
options.bbox[2] - options.max_radial_length,
options.bbox[3] - options.max_radial_length
];
const features = [];
for (let i = 0; i < count; i++) {
let vertices = [];
const circleOffsets = [...Array(options.num_vertices + 1)].map(Math.random);
circleOffsets.forEach((cur, index, arr) => {
arr[index] = index > 0 ? cur + arr[index - 1] : cur;
});
circleOffsets.forEach((cur) => {
cur = cur * 2 * Math.PI / circleOffsets[circleOffsets.length - 1];
const radialScaler = Math.random();
vertices.push([
radialScaler * (options.max_radial_length || 10) * Math.sin(cur),
radialScaler * (options.max_radial_length || 10) * Math.cos(cur)
]);
});
vertices[vertices.length - 1] = vertices[0];
vertices = vertices.reverse().map(vertexToCoordinate(randomPositionUnchecked(paddedBbox)));
features.push(_helpers.polygon.call(void 0, [vertices]));
}
return _helpers.featureCollection.call(void 0, features);
}
function randomLineString(count, options = {}) {
options = options || {};
if (!_helpers.isObject.call(void 0, options)) {
throw new Error("options is invalid");
}
const bbox = options.bbox;
checkBBox(bbox);
let num_vertices = options.num_vertices;
let max_length = options.max_length;
let max_rotation = options.max_rotation;
if (count === void 0 || count === null) {
count = 1;
}
if (!_helpers.isNumber.call(void 0, num_vertices) || num_vertices === void 0 || num_vertices < 2) {
num_vertices = 10;
}
if (!_helpers.isNumber.call(void 0, max_length) || max_length === void 0) {
max_length = 1e-4;
}
if (!_helpers.isNumber.call(void 0, max_rotation) || max_rotation === void 0) {
max_rotation = Math.PI / 8;
}
const features = [];
for (let i = 0; i < count; i++) {
const startingPoint = randomPositionUnchecked(bbox);
const vertices = [startingPoint];
for (let j = 0; j < num_vertices - 1; j++) {
const priorAngle = j === 0 ? Math.random() * 2 * Math.PI : Math.tan(
(vertices[j][1] - vertices[j - 1][1]) / (vertices[j][0] - vertices[j - 1][0])
);
const angle = priorAngle + (Math.random() - 0.5) * max_rotation * 2;
const distance = Math.random() * max_length;
vertices.push([
vertices[j][0] + distance * Math.cos(angle),
vertices[j][1] + distance * Math.sin(angle)
]);
}
features.push(_helpers.lineString.call(void 0, vertices));
}
return _helpers.featureCollection.call(void 0, features);
}
function vertexToCoordinate(hub) {
return (cur) => {
return [cur[0] + hub[0], cur[1] + hub[1]];
};
}
function rnd() {
return Math.random() - 0.5;
}
function lon() {
return rnd() * 360;
}
function lat() {
return rnd() * 180;
}
function coordInBBox(bbox) {
return [
Math.random() * (bbox[2] - bbox[0]) + bbox[0],
Math.random() * (bbox[3] - bbox[1]) + bbox[1]
];
}
exports.randomLineString = randomLineString; exports.randomPoint = randomPoint; exports.randomPolygon = randomPolygon; exports.randomPosition = randomPosition;
//# sourceMappingURL=index.cjs.map
;