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

45 lines (42 loc) 1.6 kB
import Location from '../geom/Location' import hasInterface from '../../../../hasInterface' import Coordinate from '../geom/Coordinate' import CoordinateSequence from '../geom/CoordinateSequence' import RobustLineIntersector from './RobustLineIntersector' import RayCrossingCounter from './RayCrossingCounter' export default class PointLocation { static isOnLine() { if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) { const p = arguments[0], line = arguments[1] const lineIntersector = new RobustLineIntersector() const p0 = new Coordinate() const p1 = new Coordinate() const n = line.size() for (let i = 1; i < n; i++) { line.getCoordinate(i - 1, p0) line.getCoordinate(i, p1) lineIntersector.computeIntersection(p, p0, p1) if (lineIntersector.hasIntersection()) return true } return false } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) { const p = arguments[0], line = arguments[1] const lineIntersector = new RobustLineIntersector() for (let i = 1; i < line.length; i++) { const p0 = line[i - 1] const p1 = line[i] lineIntersector.computeIntersection(p, p0, p1) if (lineIntersector.hasIntersection()) return true } return false } } static locateInRing(p, ring) { return RayCrossingCounter.locatePointInRing(p, ring) } static isInRing(p, ring) { return PointLocation.locateInRing(p, ring) !== Location.EXTERIOR } }