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
217 lines (214 loc) • 6.74 kB
JavaScript
import TreeSet from '../../../../java/util/TreeSet'
import Geometry from './Geometry'
import Arrays from '../../../../java/util/Arrays'
import CoordinateFilter from './CoordinateFilter'
import hasInterface from '../../../../hasInterface'
import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'
import GeometryComponentFilter from './GeometryComponentFilter'
import Dimension from './Dimension'
import GeometryFilter from './GeometryFilter'
import CoordinateSequenceFilter from './CoordinateSequenceFilter'
import Envelope from './Envelope'
import Assert from '../util/Assert'
export default class GeometryCollection extends Geometry {
constructor (geometries, factory) {
super(factory)
this._geometries = geometries || []
if (Geometry.hasNullElements(this._geometries)) {
throw new IllegalArgumentException('geometries must not contain null elements')
}
}
computeEnvelopeInternal () {
var envelope = new Envelope()
for (var i = 0; i < this._geometries.length; i++) {
envelope.expandToInclude(this._geometries[i].getEnvelopeInternal())
}
return envelope
}
getGeometryN (n) {
return this._geometries[n]
}
getSortIndex () {
return Geometry.SORTINDEX_GEOMETRYCOLLECTION
}
getCoordinates () {
var coordinates = new Array(this.getNumPoints()).fill(null)
var k = -1
for (var i = 0; i < this._geometries.length; i++) {
var childCoordinates = this._geometries[i].getCoordinates()
for (var j = 0; j < childCoordinates.length; j++) {
k++
coordinates[k] = childCoordinates[j]
}
}
return coordinates
}
getArea () {
var area = 0.0
for (var i = 0; i < this._geometries.length; i++) {
area += this._geometries[i].getArea()
}
return area
}
equalsExact () {
if (arguments.length === 2) {
const other = arguments[0]
const tolerance = arguments[1]
if (!this.isEquivalentClass(other)) {
return false
}
var otherCollection = other
if (this._geometries.length !== otherCollection._geometries.length) {
return false
}
for (var i = 0; i < this._geometries.length; i++) {
if (!this._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {
return false
}
}
return true
} else return Geometry.prototype.equalsExact.apply(this, arguments)
}
normalize () {
for (var i = 0; i < this._geometries.length; i++) {
this._geometries[i].normalize()
}
Arrays.sort(this._geometries)
}
getCoordinate () {
if (this.isEmpty()) return null
return this._geometries[0].getCoordinate()
}
getBoundaryDimension () {
var dimension = Dimension.FALSE
for (var i = 0; i < this._geometries.length; i++) {
dimension = Math.max(dimension, this._geometries[i].getBoundaryDimension())
}
return dimension
}
getDimension () {
var dimension = Dimension.FALSE
for (var i = 0; i < this._geometries.length; i++) {
dimension = Math.max(dimension, this._geometries[i].getDimension())
}
return dimension
}
getLength () {
var sum = 0.0
for (var i = 0; i < this._geometries.length; i++) {
sum += this._geometries[i].getLength()
}
return sum
}
getNumPoints () {
var numPoints = 0
for (var i = 0; i < this._geometries.length; i++) {
numPoints += this._geometries[i].getNumPoints()
}
return numPoints
}
getNumGeometries () {
return this._geometries.length
}
reverse () {
var n = this._geometries.length
var revGeoms = new Array(n).fill(null)
for (var i = 0; i < this._geometries.length; i++) {
revGeoms[i] = this._geometries[i].reverse()
}
return this.getFactory().createGeometryCollection(revGeoms)
}
compareToSameClass () {
if (arguments.length === 1) {
const o = arguments[0]
const theseElements = new TreeSet(Arrays.asList(this._geometries))
const otherElements = new TreeSet(Arrays.asList(o._geometries))
return this.compare(theseElements, otherElements)
} else if (arguments.length === 2) {
const o = arguments[0]
const comp = arguments[1]
const gc = o
const n1 = this.getNumGeometries()
const n2 = gc.getNumGeometries()
let i = 0
while (i < n1 && i < n2) {
const thisGeom = this.getGeometryN(i)
const otherGeom = gc.getGeometryN(i)
const holeComp = thisGeom.compareToSameClass(otherGeom, comp)
if (holeComp !== 0) return holeComp
i++
}
if (i < n1) return 1
if (i < n2) return -1
return 0
}
}
apply () {
if (hasInterface(arguments[0], CoordinateFilter)) {
const filter = arguments[0]
for (let i = 0; i < this._geometries.length; i++) {
this._geometries[i].apply(filter)
}
} else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
const filter = arguments[0]
if (this._geometries.length === 0) return null
for (let i = 0; i < this._geometries.length; i++) {
this._geometries[i].apply(filter)
if (filter.isDone()) {
break
}
}
if (filter.isGeometryChanged()) this.geometryChanged()
} else if (hasInterface(arguments[0], GeometryFilter)) {
const filter = arguments[0]
filter.filter(this)
for (let i = 0; i < this._geometries.length; i++) {
this._geometries[i].apply(filter)
}
} else if (hasInterface(arguments[0], GeometryComponentFilter)) {
let filter = arguments[0]
filter.filter(this)
for (let i = 0; i < this._geometries.length; i++) {
this._geometries[i].apply(filter)
}
}
}
getBoundary () {
this.checkNotGeometryCollection(this)
Assert.shouldNeverReachHere()
return null
}
clone () {
var gc = Geometry.prototype.clone.call(this)
gc._geometries = new Array(this._geometries.length).fill(null)
for (var i = 0; i < this._geometries.length; i++) {
gc._geometries[i] = this._geometries[i].clone()
}
return gc
}
getGeometryType () {
return 'GeometryCollection'
}
copy () {
var geometries = new Array(this._geometries.length).fill(null)
for (var i = 0; i < geometries.length; i++) {
geometries[i] = this._geometries[i].copy()
}
return new GeometryCollection(geometries, this._factory)
}
isEmpty () {
for (let i = 0; i < this._geometries.length; i++) {
if (!this._geometries[i].isEmpty()) {
return false
}
}
return true
}
interfaces_ () {
return []
}
getClass () {
return GeometryCollection
}
static get serialVersionUID () { return -5694727726395021467 }
}