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
59 lines (58 loc) • 1.68 kB
JavaScript
import Quadtree from '../index/quadtree/Quadtree'
import ItemVisitor from '../index/ItemVisitor'
import LineSegment from '../geom/LineSegment'
import ArrayList from '../../../../java/util/ArrayList'
import Envelope from '../geom/Envelope'
import TaggedLineString from './TaggedLineString'
export default class LineSegmentIndex {
constructor() {
LineSegmentIndex.constructor_.apply(this, arguments)
}
static constructor_() {
this._index = new Quadtree()
}
remove(seg) {
this._index.remove(new Envelope(seg.p0, seg.p1), seg)
}
add() {
if (arguments[0] instanceof TaggedLineString) {
const line = arguments[0]
const segs = line.getSegments()
for (let i = 0; i < segs.length; i++) {
const seg = segs[i]
this.add(seg)
}
} else if (arguments[0] instanceof LineSegment) {
const seg = arguments[0]
this._index.insert(new Envelope(seg.p0, seg.p1), seg)
}
}
query(querySeg) {
const env = new Envelope(querySeg.p0, querySeg.p1)
const visitor = new LineSegmentVisitor(querySeg)
this._index.query(env, visitor)
const itemsFound = visitor.getItems()
return itemsFound
}
}
class LineSegmentVisitor {
constructor() {
LineSegmentVisitor.constructor_.apply(this, arguments)
}
static constructor_() {
this._querySeg = null
this._items = new ArrayList()
const querySeg = arguments[0]
this._querySeg = querySeg
}
visitItem(item) {
const seg = item
if (Envelope.intersects(seg.p0, seg.p1, this._querySeg.p0, this._querySeg.p1)) this._items.add(item)
}
getItems() {
return this._items
}
get interfaces_() {
return [ItemVisitor]
}
}