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
49 lines • 2.04 kB
JavaScript
// index.ts
import { booleanPointInPolygon } from "@turf/boolean-point-in-polygon";
import { pointToLineDistance } from "@turf/point-to-line-distance";
import { polygonToLine } from "@turf/polygon-to-line";
import { getGeom } from "@turf/invariant";
import { flattenEach } from "@turf/meta";
import { polygon } from "@turf/helpers";
function pointToPolygonDistance(point, polygonOrMultiPolygon, options = {}) {
var _a, _b;
const method = (_a = options.method) != null ? _a : "geodesic";
const units = (_b = options.units) != null ? _b : "kilometers";
if (!point) throw new Error("point is required");
if (!polygonOrMultiPolygon)
throw new Error("polygon or multi-polygon is required");
const geom = getGeom(polygonOrMultiPolygon);
if (geom.type === "MultiPolygon") {
const distances = geom.coordinates.map(
(coords) => pointToPolygonDistance(point, polygon(coords), { method, units })
);
return Math.min(...distances.map(Math.abs)) * (booleanPointInPolygon(point, polygonOrMultiPolygon) ? -1 : 1);
}
if (geom.coordinates.length > 1) {
const [exteriorDistance, ...interiorDistances] = geom.coordinates.map(
(coords) => pointToPolygonDistance(point, polygon([coords]), { method, units })
);
if (exteriorDistance >= 0) return exteriorDistance;
const smallestInteriorDistance = Math.min(...interiorDistances);
if (smallestInteriorDistance < 0) return Math.abs(smallestInteriorDistance);
return Math.min(smallestInteriorDistance, Math.abs(exteriorDistance));
}
const lines = polygonToLine(geom);
let minDistance = Infinity;
flattenEach(lines, (feature) => {
minDistance = Math.min(
minDistance,
pointToLineDistance(point, feature, {
method,
units
})
);
});
return booleanPointInPolygon(point, geom) ? -minDistance : minDistance;
}
var turf_point_to_polygon_distance_default = pointToPolygonDistance;
export {
turf_point_to_polygon_distance_default as default,
pointToPolygonDistance
};
//# sourceMappingURL=index.js.map