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
62 lines • 1.91 kB
JavaScript
// index.ts
import { featureCollection, isObject, multiPolygon } from "@turf/helpers";
import { collectionOf } from "@turf/invariant";
import { featureEach } from "@turf/meta";
import { flatten } from "@turf/flatten";
import * as polyclip from "polyclip-ts";
function dissolve(fc, options = {}) {
options = options || {};
if (!isObject(options)) throw new Error("options is invalid");
const { propertyName } = options;
collectionOf(fc, "Polygon", "dissolve");
const outFeatures = [];
if (!propertyName) {
return flatten(
multiPolygon(
polyclip.union.apply(
null,
// List of polygons expressed as Position[][][] a.k.a. Geom[]
fc.features.map(function(f) {
return f.geometry.coordinates;
})
)
)
);
} else {
const uniquePropertyVals = {};
featureEach(fc, function(feature) {
if (feature.properties) {
if (!Object.prototype.hasOwnProperty.call(
uniquePropertyVals,
feature.properties[propertyName]
)) {
uniquePropertyVals[feature.properties[propertyName]] = [];
}
uniquePropertyVals[feature.properties[propertyName]].push(feature);
}
});
const vals = Object.keys(uniquePropertyVals);
for (let i = 0; i < vals.length; i++) {
const mp = multiPolygon(
polyclip.union.apply(
null,
// List of polygons expressed as Position[][][] a.k.a. Geom[]
uniquePropertyVals[vals[i]].map(function(f) {
return f.geometry.coordinates;
})
)
);
if (mp && mp.properties) {
mp.properties[propertyName] = vals[i];
outFeatures.push(mp);
}
}
}
return flatten(featureCollection(outFeatures));
}
var turf_dissolve_default = dissolve;
export {
turf_dissolve_default as default,
dissolve
};
//# sourceMappingURL=index.js.map