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
82 lines (80 loc) • 2.36 kB
JavaScript
import Root from './Root'
import SpatialIndex from '../SpatialIndex'
import ArrayList from '../../../../../java/util/ArrayList'
import ArrayListVisitor from '../ArrayListVisitor'
import Serializable from '../../../../../java/io/Serializable'
import Envelope from '../../geom/Envelope'
export default class Quadtree {
constructor () {
this._root = null
this._minExtent = 1.0
this._root = new Root()
}
size () {
if (this._root !== null) return this._root.size()
return 0
}
insert (itemEnv, item) {
this.collectStats(itemEnv)
const insertEnv = Quadtree.ensureExtent(itemEnv, this._minExtent)
this._root.insert(insertEnv, item)
}
query () {
if (arguments.length === 1) {
const searchEnv = arguments[0]
const visitor = new ArrayListVisitor()
this.query(searchEnv, visitor)
return visitor.getItems()
} else if (arguments.length === 2) {
const searchEnv = arguments[0]
const visitor = arguments[1]
this._root.visit(searchEnv, visitor)
}
}
queryAll () {
const foundItems = new ArrayList()
this._root.addAllItems(foundItems)
return foundItems
}
remove (itemEnv, item) {
const posEnv = Quadtree.ensureExtent(itemEnv, this._minExtent)
return this._root.remove(posEnv, item)
}
collectStats (itemEnv) {
const delX = itemEnv.getWidth()
if (delX < this._minExtent && delX > 0.0) this._minExtent = delX
const delY = itemEnv.getHeight()
if (delY < this._minExtent && delY > 0.0) this._minExtent = delY
}
depth () {
if (this._root !== null) return this._root.depth()
return 0
}
isEmpty () {
if (this._root === null) return true
return false
}
interfaces_ () {
return [SpatialIndex, Serializable]
}
getClass () {
return Quadtree
}
static ensureExtent (itemEnv, minExtent) {
let minx = itemEnv.getMinX()
let maxx = itemEnv.getMaxX()
let miny = itemEnv.getMinY()
let maxy = itemEnv.getMaxY()
if (minx !== maxx && miny !== maxy) return itemEnv
if (minx === maxx) {
minx = minx - minExtent / 2.0
maxx = minx + minExtent / 2.0
}
if (miny === maxy) {
miny = miny - minExtent / 2.0
maxy = miny + minExtent / 2.0
}
return new Envelope(minx, maxx, miny, maxy)
}
static get serialVersionUID () { return -7461163625812743604 }
}