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
64 lines (62 loc) • 1.9 kB
JavaScript
import NodingValidator from '../NodingValidator'
import NodedSegmentString from '../NodedSegmentString'
import ArrayList from '../../../../../java/util/ArrayList'
import LinearComponentExtracter from '../../geom/util/LinearComponentExtracter'
import MCIndexSnapRounder from './MCIndexSnapRounder'
export default class GeometryNoder {
constructor () {
this._geomFact = null
this._pm = null
this._isValidityChecked = false
let pm = arguments[0]
this._pm = pm
}
extractLines (geoms) {
const lines = new ArrayList()
const lce = new LinearComponentExtracter(lines)
for (const it = geoms.iterator(); it.hasNext();) {
const geom = it.next()
geom.apply(lce)
}
return lines
}
setValidate (isValidityChecked) {
this._isValidityChecked = isValidityChecked
}
node (geoms) {
const geom0 = geoms.iterator().next()
this._geomFact = geom0.getFactory()
const segStrings = this.toSegmentStrings(this.extractLines(geoms))
const sr = new MCIndexSnapRounder(this._pm)
sr.computeNodes(segStrings)
const nodedLines = sr.getNodedSubstrings()
if (this._isValidityChecked) {
const nv = new NodingValidator(nodedLines)
nv.checkValid()
}
return this.toLineStrings(nodedLines)
}
toSegmentStrings (lines) {
const segStrings = new ArrayList()
for (const it = lines.iterator(); it.hasNext();) {
const line = it.next()
segStrings.add(new NodedSegmentString(line.getCoordinates(), null))
}
return segStrings
}
toLineStrings (segStrings) {
const lines = new ArrayList()
for (const it = segStrings.iterator(); it.hasNext();) {
const ss = it.next()
if (ss.size() < 2) continue
lines.add(this._geomFact.createLineString(ss.getCoordinates()))
}
return lines
}
interfaces_ () {
return []
}
getClass () {
return GeometryNoder
}
}