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

95 lines (93 loc) 2.64 kB
import NodeBase from './NodeBase' import Interval from './Interval' import Assert from '../../util/Assert' import Key from './Key' export default class Node extends NodeBase { constructor () { super() this._interval = null this._centre = null this._level = null const interval = arguments[0] const level = arguments[1] this._interval = interval this._level = level this._centre = (interval.getMin() + interval.getMax()) / 2 } getInterval () { return this._interval } find (searchInterval) { const subnodeIndex = NodeBase.getSubnodeIndex(searchInterval, this._centre) if (subnodeIndex === -1) return this if (this._subnode[subnodeIndex] !== null) { const node = this._subnode[subnodeIndex] return node.find(searchInterval) } return this } insert (node) { Assert.isTrue(this._interval === null || this._interval.contains(node._interval)) const index = NodeBase.getSubnodeIndex(node._interval, this._centre) if (node._level === this._level - 1) { this._subnode[index] = node } else { const childNode = this.createSubnode(index) childNode.insert(node) this._subnode[index] = childNode } } isSearchMatch (itemInterval) { return itemInterval.overlaps(this._interval) } getSubnode (index) { if (this._subnode[index] === null) { this._subnode[index] = this.createSubnode(index) } return this._subnode[index] } getNode (searchInterval) { const subnodeIndex = NodeBase.getSubnodeIndex(searchInterval, this._centre) if (subnodeIndex !== -1) { const node = this.getSubnode(subnodeIndex) return node.getNode(searchInterval) } else { return this } } createSubnode (index) { let min = 0.0 let max = 0.0 switch (index) { case 0: min = this._interval.getMin() max = this._centre break case 1: min = this._centre max = this._interval.getMax() break } const subInt = new Interval(min, max) const node = new Node(subInt, this._level - 1) return node } interfaces_ () { return [] } getClass () { return Node } static createNode (itemInterval) { const key = new Key(itemInterval) const node = new Node(key.getInterval(), key.getLevel()) return node } static createExpanded (node, addInterval) { const expandInt = new Interval(addInterval) if (node !== null) expandInt.expandToInclude(node._interval) const largerNode = Node.createNode(expandInt) if (node !== null) largerNode.insert(node) return largerNode } }