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
80 lines (76 loc) • 2.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", {value: true});// index.ts
var _centroid = require('@turf/centroid');
var _invariant = require('@turf/invariant');
var _meta = require('@turf/meta');
function pNormDistance(feature1, feature2, p = 2) {
const coordinate1 = _invariant.getCoord.call(void 0, feature1);
const coordinate2 = _invariant.getCoord.call(void 0, feature2);
const xDiff = coordinate1[0] - coordinate2[0];
const yDiff = coordinate1[1] - coordinate2[1];
if (p === 1) {
return Math.abs(xDiff) + Math.abs(yDiff);
}
return Math.pow(Math.pow(xDiff, p) + Math.pow(yDiff, p), 1 / p);
}
function distanceWeight(fc, options) {
var _a, _b;
options = options || {};
const threshold = options.threshold || 1e4;
const p = options.p || 2;
const binary = (_a = options.binary) != null ? _a : false;
const alpha = options.alpha || -1;
const rowTransform = (_b = options.standardization) != null ? _b : false;
const features = [];
_meta.featureEach.call(void 0, fc, (feature) => {
features.push(_centroid.centroid.call(void 0, feature));
});
const weights = [];
for (let i = 0; i < features.length; i++) {
weights[i] = [];
}
for (let i = 0; i < features.length; i++) {
for (let j = i; j < features.length; j++) {
if (i === j) {
weights[i][j] = 0;
}
const dis = pNormDistance(features[i], features[j], p);
weights[i][j] = dis;
weights[j][i] = dis;
}
}
for (let i = 0; i < features.length; i++) {
for (let j = 0; j < features.length; j++) {
const dis = weights[i][j];
if (dis === 0) {
continue;
}
if (binary) {
if (dis <= threshold) {
weights[i][j] = 1;
} else {
weights[i][j] = 0;
}
} else {
if (dis <= threshold) {
weights[i][j] = Math.pow(dis, alpha);
} else {
weights[i][j] = 0;
}
}
}
}
if (rowTransform) {
for (let i = 0; i < features.length; i++) {
const rowSum = weights[i].reduce((sum, currentVal) => {
return sum + currentVal;
}, 0);
for (let j = 0; j < features.length; j++) {
weights[i][j] = weights[i][j] / rowSum;
}
}
}
return weights;
}
var turf_distance_weight_default = distanceWeight;
exports.default = turf_distance_weight_default; exports.distanceWeight = distanceWeight; exports.pNormDistance = pNormDistance;
//# sourceMappingURL=index.cjs.map
;