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
54 lines (53 loc) • 2.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var meta_1 = require("@turf/meta");
var helpers_1 = require("@turf/helpers");
/**
* Takes a {@link Feature} or {@link FeatureCollection} and returns the mean center. Can be weighted.
*
* @name centerMean
* @param {GeoJSON} geojson GeoJSON to be centered
* @param {Object} [options={}] Optional parameters
* @param {Object} [options.properties={}] Translate GeoJSON Properties to Point
* @param {Object} [options.bbox={}] Translate GeoJSON BBox to Point
* @param {Object} [options.id={}] Translate GeoJSON Id to Point
* @param {string} [options.weight] the property name used to weight the center
* @returns {Feature<Point>} a Point feature at the mean center point of all input features
* @example
* var features = turf.featureCollection([
* turf.point([-97.522259, 35.4691], {value: 10}),
* turf.point([-97.502754, 35.463455], {value: 3}),
* turf.point([-97.508269, 35.463245], {value: 5})
* ]);
*
* var options = {weight: "value"}
* var mean = turf.centerMean(features, options);
*
* //addToMap
* var addToMap = [features, mean]
* mean.properties['marker-size'] = 'large';
* mean.properties['marker-color'] = '#000';
*/
function centerMean(geojson, // To-Do include Typescript AllGeoJSON
options) {
if (options === void 0) { options = {}; }
var sumXs = 0;
var sumYs = 0;
var sumNs = 0;
meta_1.geomEach(geojson, function (geom, featureIndex, properties) {
var weight = options.weight ? properties === null || properties === void 0 ? void 0 : properties[options.weight] : undefined;
weight = weight === undefined || weight === null ? 1 : weight;
if (!helpers_1.isNumber(weight))
throw new Error("weight value must be a number for feature index " + featureIndex);
weight = Number(weight);
if (weight > 0) {
meta_1.coordEach(geom, function (coord) {
sumXs += coord[0] * weight;
sumYs += coord[1] * weight;
sumNs += weight;
});
}
});
return helpers_1.point([sumXs / sumNs, sumYs / sumNs], options.properties, options);
}
exports.default = centerMean;
;