UNPKG

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

43 lines (41 loc) 1.57 kB
import PointLocator from '../../algorithm/PointLocator' import Location from '../../geom/Location' import TreeSet from '../../../../../java/util/TreeSet' import GeometryCombiner from '../../geom/util/GeometryCombiner' import CoordinateArrays from '../../geom/CoordinateArrays' export default class PointGeometryUnion { constructor() { PointGeometryUnion.constructor_.apply(this, arguments) } static constructor_() { this._pointGeom = null this._otherGeom = null this._geomFact = null const pointGeom = arguments[0], otherGeom = arguments[1] this._pointGeom = pointGeom this._otherGeom = otherGeom this._geomFact = otherGeom.getFactory() } static union(pointGeom, otherGeom) { const unioner = new PointGeometryUnion(pointGeom, otherGeom) return unioner.union() } union() { const locater = new PointLocator() const exteriorCoords = new TreeSet() for (let i = 0; i < this._pointGeom.getNumGeometries(); i++) { const point = this._pointGeom.getGeometryN(i) const coord = point.getCoordinate() const loc = locater.locate(coord, this._otherGeom) if (loc === Location.EXTERIOR) exteriorCoords.add(coord) } if (exteriorCoords.size() === 0) return this._otherGeom let ptComp = null const coords = CoordinateArrays.toCoordinateArray(exteriorCoords) if (coords.length === 1) ptComp = this._geomFact.createPoint(coords[0]) else ptComp = this._geomFact.createMultiPointFromCoords(coords) return GeometryCombiner.combine(ptComp, this._otherGeom) } }