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
89 lines (87 loc) • 2.96 kB
JavaScript
import hasInterface from '../../../../../hasInterface'
import ItemVisitor from '../ItemVisitor'
import AbstractNode from './AbstractNode'
import Interval from './Interval'
import Comparator from '../../../../../java/util/Comparator'
import List from '../../../../../java/util/List'
import AbstractSTRtree from './AbstractSTRtree'
export default class SIRtree extends AbstractSTRtree {
constructor (nodeCapacity) {
nodeCapacity = nodeCapacity !== undefined ? nodeCapacity : 10
super(nodeCapacity)
this._comparator = {
interfaces_: function () {
return [Comparator]
},
compare: function (o1, o2) {
return AbstractSTRtree.compareDoubles(o1.getBounds().getCentre(), o2.getBounds().getCentre())
}
}
this._intersectsOp = {
interfaces_: function () {
return [AbstractSTRtree.IntersectsOp]
},
intersects: function (aBounds, bBounds) {
return aBounds.intersects(bBounds)
}
}
}
createNode (level) {
return {
computeBounds: function () {
var bounds = null
for (var i = this.getChildBoundables().iterator(); i.hasNext();) {
var childBoundable = i.next()
if (bounds === null) {
bounds = new Interval(childBoundable.getBounds())
} else {
bounds.expandToInclude(childBoundable.getBounds())
}
}
return bounds
}
}
}
insert () {
if (arguments.length === 3) {
const x1 = arguments[0]
const x2 = arguments[1]
const item = arguments[2]
AbstractSTRtree.prototype.insert.call(this, new Interval(Math.min(x1, x2), Math.max(x1, x2)), item)
} else return AbstractSTRtree.prototype.insert.apply(this, arguments)
}
getIntersectsOp () {
return this._intersectsOp
}
query () {
if (arguments.length === 1) {
const x = arguments[0]
return this.query(x, x)
} else if (arguments.length === 2) {
const x1 = arguments[0]
const x2 = arguments[1]
return AbstractSTRtree.prototype.query.call(this, new Interval(Math.min(x1, x2), Math.max(x1, x2)))
} else if (arguments.length === 3) {
if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
const searchBounds = arguments[0]
const node = arguments[1]
const visitor = arguments[2]
AbstractSTRtree.prototype.query.call(this, searchBounds, node, visitor)
} else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
const searchBounds = arguments[0]
const node = arguments[1]
const matches = arguments[2]
AbstractSTRtree.prototype.query.call(this, searchBounds, node, matches)
}
}
}
getComparator () {
return this._comparator
}
interfaces_ () {
return []
}
getClass () {
return SIRtree
}
}