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
50 lines (47 loc) • 1.5 kB
JavaScript
import LineString from '../geom/LineString'
import Geometry from '../geom/Geometry'
import hasInterface from '../../../../hasInterface'
import Collection from '../../../../java/util/Collection'
import EdgeGraph from './EdgeGraph'
import GeometryComponentFilter from '../geom/GeometryComponentFilter'
export default class EdgeGraphBuilder {
constructor() {
EdgeGraphBuilder.constructor_.apply(this, arguments)
}
static constructor_() {
this._graph = new EdgeGraph()
}
static build(geoms) {
const builder = new EdgeGraphBuilder()
builder.add(geoms)
return builder.getGraph()
}
add() {
if (arguments[0] instanceof Geometry) {
const geometry = arguments[0]
geometry.apply(new (class {
get interfaces_() {
return [GeometryComponentFilter]
}
filter(component) {
if (component instanceof LineString)
this.add(component)
}
})())
} else if (hasInterface(arguments[0], Collection)) {
const geometries = arguments[0]
for (let i = geometries.iterator(); i.hasNext(); ) {
const geometry = i.next()
this.add(geometry)
}
} else if (arguments[0] instanceof LineString) {
const lineString = arguments[0]
const seq = lineString.getCoordinateSequence()
for (let i = 1; i < seq.size(); i++)
this._graph.addEdge(seq.getCoordinate(i - 1), seq.getCoordinate(i))
}
}
getGraph() {
return this._graph
}
}