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
97 lines (94 loc) • 3 kB
JavaScript
import SegmentNodeList from './SegmentNodeList'
import WKTWriter from '../io/WKTWriter'
import CoordinateArraySequence from '../geom/impl/CoordinateArraySequence'
import Coordinate from '../geom/Coordinate'
import Octant from './Octant'
import ArrayList from '../../../../java/util/ArrayList'
import NodableSegmentString from './NodableSegmentString'
export default class NodedSegmentString {
constructor() {
NodedSegmentString.constructor_.apply(this, arguments)
}
static constructor_() {
this._nodeList = new SegmentNodeList(this)
this._pts = null
this._data = null
const pts = arguments[0], data = arguments[1]
this._pts = pts
this._data = data
}
static getNodedSubstrings() {
if (arguments.length === 1) {
const segStrings = arguments[0]
const resultEdgelist = new ArrayList()
NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist)
return resultEdgelist
} else if (arguments.length === 2) {
const segStrings = arguments[0], resultEdgelist = arguments[1]
for (let i = segStrings.iterator(); i.hasNext(); ) {
const ss = i.next()
ss.getNodeList().addSplitEdges(resultEdgelist)
}
}
}
getCoordinates() {
return this._pts
}
size() {
return this._pts.length
}
getCoordinate(i) {
return this._pts[i]
}
isClosed() {
return this._pts[0].equals(this._pts[this._pts.length - 1])
}
getSegmentOctant(index) {
if (index === this._pts.length - 1) return -1
return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))
}
setData(data) {
this._data = data
}
safeOctant(p0, p1) {
if (p0.equals2D(p1)) return 0
return Octant.octant(p0, p1)
}
getData() {
return this._data
}
addIntersection() {
if (arguments.length === 2) {
const intPt = arguments[0], segmentIndex = arguments[1]
this.addIntersectionNode(intPt, segmentIndex)
} else if (arguments.length === 4) {
const li = arguments[0], segmentIndex = arguments[1], geomIndex = arguments[2], intIndex = arguments[3]
const intPt = new Coordinate(li.getIntersection(intIndex))
this.addIntersection(intPt, segmentIndex)
}
}
toString() {
return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
}
getNodeList() {
return this._nodeList
}
addIntersectionNode(intPt, segmentIndex) {
let normalizedSegmentIndex = segmentIndex
const nextSegIndex = normalizedSegmentIndex + 1
if (nextSegIndex < this._pts.length) {
const nextPt = this._pts[nextSegIndex]
if (intPt.equals2D(nextPt))
normalizedSegmentIndex = nextSegIndex
}
const ei = this._nodeList.add(intPt, normalizedSegmentIndex)
return ei
}
addIntersections(li, segmentIndex, geomIndex) {
for (let i = 0; i < li.getIntersectionNum(); i++)
this.addIntersection(li, segmentIndex, geomIndex, i)
}
get interfaces_() {
return [NodableSegmentString]
}
}