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
108 lines • 3.36 kB
JavaScript
// index.ts
import { featureEach } from "@turf/meta";
import { featureCollection } from "@turf/helpers";
function getCluster(geojson, filter) {
if (!geojson) throw new Error("geojson is required");
if (geojson.type !== "FeatureCollection")
throw new Error("geojson must be a FeatureCollection");
if (filter === void 0 || filter === null)
throw new Error("filter is required");
var features = [];
featureEach(geojson, function(feature) {
if (applyFilter(feature.properties, filter)) features.push(feature);
});
return featureCollection(features);
}
function clusterEach(geojson, property, callback) {
if (!geojson) throw new Error("geojson is required");
if (geojson.type !== "FeatureCollection")
throw new Error("geojson must be a FeatureCollection");
if (property === void 0 || property === null)
throw new Error("property is required");
var bins = createBins(geojson, property);
var values = Object.keys(bins);
for (var index = 0; index < values.length; index++) {
var value = values[index];
var bin = bins[value];
var features = [];
for (var i = 0; i < bin.length; i++) {
features.push(geojson.features[bin[i]]);
}
callback(featureCollection(features), value, index);
}
}
function clusterReduce(geojson, property, callback, initialValue) {
var previousValue = initialValue;
clusterEach(
geojson,
property,
function(cluster, clusterValue, currentIndex) {
if (currentIndex === 0 && initialValue === void 0)
previousValue = cluster;
else
previousValue = callback(
previousValue,
cluster,
clusterValue,
currentIndex
);
}
);
return previousValue;
}
function createBins(geojson, property) {
var bins = {};
featureEach(geojson, function(feature, i) {
var properties = feature.properties || {};
if (Object.prototype.hasOwnProperty.call(properties, String(property))) {
var value = properties[property];
if (Object.prototype.hasOwnProperty.call(bins, value))
bins[value].push(i);
else bins[value] = [i];
}
});
return bins;
}
function applyFilter(properties, filter) {
if (properties === void 0) return false;
var filterType = typeof filter;
if (filterType === "number" || filterType === "string")
return Object.prototype.hasOwnProperty.call(properties, filter);
else if (Array.isArray(filter)) {
for (var i = 0; i < filter.length; i++) {
if (!applyFilter(properties, filter[i])) return false;
}
return true;
} else {
return propertiesContainsFilter(properties, filter);
}
}
function propertiesContainsFilter(properties, filter) {
var keys = Object.keys(filter);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (properties[key] !== filter[key]) return false;
}
return true;
}
function filterProperties(properties, keys) {
if (!keys) return {};
if (!keys.length) return {};
var newProperties = {};
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (Object.prototype.hasOwnProperty.call(properties, key))
newProperties[key] = properties[key];
}
return newProperties;
}
export {
applyFilter,
clusterEach,
clusterReduce,
createBins,
filterProperties,
getCluster,
propertiesContainsFilter
};
//# sourceMappingURL=index.js.map