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
58 lines (56 loc) • 1.86 kB
JavaScript
import LineString from '../../geom/LineString'
import FacetSequence from './FacetSequence'
import STRtree from '../../index/strtree/STRtree'
import Point from '../../geom/Point'
import GeometryComponentFilter from '../../geom/GeometryComponentFilter'
import ArrayList from '../../../../../java/util/ArrayList'
export default class FacetSequenceTreeBuilder {
interfaces_ () {
return []
}
getClass () {
return FacetSequenceTreeBuilder
}
static addFacetSequences (pts, sections) {
let i = 0
const size = pts.size()
while (i <= size - 1) {
let end = i + FacetSequenceTreeBuilder.FACET_SEQUENCE_SIZE + 1
if (end >= size - 1) end = size
const sect = new FacetSequence(pts, i, end)
sections.add(sect)
i = i + FacetSequenceTreeBuilder.FACET_SEQUENCE_SIZE
}
}
static computeFacetSequences (g) {
const sections = new ArrayList()
g.apply({
interfaces_: function () {
return [GeometryComponentFilter]
},
filter: function (geom) {
let seq = null
if (geom instanceof LineString) {
seq = geom.getCoordinateSequence()
FacetSequenceTreeBuilder.addFacetSequences(seq, sections)
} else if (geom instanceof Point) {
seq = geom.getCoordinateSequence()
FacetSequenceTreeBuilder.addFacetSequences(seq, sections)
}
}
})
return sections
}
static build (g) {
const tree = new STRtree(FacetSequenceTreeBuilder.STR_TREE_NODE_CAPACITY)
const sections = FacetSequenceTreeBuilder.computeFacetSequences(g)
for (const i = sections.iterator(); i.hasNext();) {
const section = i.next()
tree.insert(section.getEnvelope(), section)
}
tree.build()
return tree
}
static get FACET_SEQUENCE_SIZE () { return 6 }
static get STR_TREE_NODE_CAPACITY () { return 4 }
}