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

213 lines (211 loc) 6.01 kB
import CGAlgorithms from '../algorithm/CGAlgorithms' import Geometry from './Geometry' import CoordinateFilter from './CoordinateFilter' import hasInterface from '../../../../hasInterface' import { BoundaryOp } from '../operation/boundary' import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException' import Lineal from './Lineal' import CoordinateSequences from './CoordinateSequences' import GeometryComponentFilter from './GeometryComponentFilter' import Dimension from './Dimension' import GeometryFilter from './GeometryFilter' import CoordinateSequenceFilter from './CoordinateSequenceFilter' import Envelope from './Envelope' export default class LineString extends Geometry { constructor (points, factory) { super(factory) this._points = null this.init(points) } computeEnvelopeInternal () { if (this.isEmpty()) { return new Envelope() } return this._points.expandEnvelope(new Envelope()) } isRing () { return this.isClosed() && this.isSimple() } getSortIndex () { return Geometry.SORTINDEX_LINESTRING } getCoordinates () { return this._points.toCoordinateArray() } equalsExact () { if (arguments.length === 2) { const other = arguments[0] const tolerance = arguments[1] if (!this.isEquivalentClass(other)) { return false } var otherLineString = other if (this._points.size() !== otherLineString._points.size()) { return false } for (var i = 0; i < this._points.size(); i++) { if (!this.equal(this._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) { return false } } return true } else return Geometry.prototype.equalsExact.apply(this, arguments) } normalize () { for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) { var j = this._points.size() - 1 - i if (!this._points.getCoordinate(i).equals(this._points.getCoordinate(j))) { if (this._points.getCoordinate(i).compareTo(this._points.getCoordinate(j)) > 0) { CoordinateSequences.reverse(this._points) } return null } } } getCoordinate () { if (this.isEmpty()) return null return this._points.getCoordinate(0) } getBoundaryDimension () { if (this.isClosed()) { return Dimension.FALSE } return 0 } isClosed () { if (this.isEmpty()) { return false } return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1)) } getEndPoint () { if (this.isEmpty()) { return null } return this.getPointN(this.getNumPoints() - 1) } getDimension () { return 1 } getLength () { return CGAlgorithms.computeLength(this._points) } getNumPoints () { return this._points.size() } reverse () { const seq = this._points.copy() CoordinateSequences.reverse(seq) const revLine = this.getFactory().createLineString(seq) return revLine } compareToSameClass () { if (arguments.length === 1) { const o = arguments[0] const line = o let i = 0 let j = 0 while (i < this._points.size() && j < line._points.size()) { var comparison = this._points.getCoordinate(i).compareTo(line._points.getCoordinate(j)) if (comparison !== 0) { return comparison } i++ j++ } if (i < this._points.size()) { return 1 } if (j < line._points.size()) { return -1 } return 0 } else if (arguments.length === 2) { const o = arguments[0] const comp = arguments[1] const line = o return comp.compare(this._points, line._points) } } apply () { if (hasInterface(arguments[0], CoordinateFilter)) { let filter = arguments[0] for (var i = 0; i < this._points.size(); i++) { filter.filter(this._points.getCoordinate(i)) } } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) { const filter = arguments[0] if (this._points.size() === 0) return null for (let i = 0; i < this._points.size(); i++) { filter.filter(this._points, i) if (filter.isDone()) break } if (filter.isGeometryChanged()) this.geometryChanged() } else if (hasInterface(arguments[0], GeometryFilter)) { const filter = arguments[0] filter.filter(this) } else if (hasInterface(arguments[0], GeometryComponentFilter)) { const filter = arguments[0] filter.filter(this) } } getBoundary () { return new BoundaryOp(this).getBoundary() } isEquivalentClass (other) { return other instanceof LineString } clone () { var ls = Geometry.prototype.clone.call(this) ls._points = this._points.clone() return ls } getCoordinateN (n) { return this._points.getCoordinate(n) } getGeometryType () { return 'LineString' } copy () { return new LineString(this._points.copy(), this._factory) } getCoordinateSequence () { return this._points } isEmpty () { return this._points.size() === 0 } init (points) { if (points === null) { points = this.getFactory().getCoordinateSequenceFactory().create([]) } if (points.size() === 1) { throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)') } this._points = points } isCoordinate (pt) { for (var i = 0; i < this._points.size(); i++) { if (this._points.getCoordinate(i).equals(pt)) { return true } } return false } getStartPoint () { if (this.isEmpty()) { return null } return this.getPointN(0) } getPointN (n) { return this.getFactory().createPoint(this._points.getCoordinate(n)) } interfaces_ () { return [Lineal] } getClass () { return LineString } static get serialVersionUID () { return 3110669828065365560 } }