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
65 lines (63 loc) • 2.06 kB
JavaScript
import WKTWriter from '../io/WKTWriter'
import MCIndexNoder from './MCIndexNoder'
import TopologyException from '../geom/TopologyException'
import RobustLineIntersector from '../algorithm/RobustLineIntersector'
import InteriorIntersectionFinder from './InteriorIntersectionFinder'
export default class FastNodingValidator {
constructor () {
this._li = new RobustLineIntersector()
this._segStrings = null
this._findAllIntersections = false
this._segInt = null
this._isValid = true
const segStrings = arguments[0]
this._segStrings = segStrings
}
execute () {
if (this._segInt !== null) return null
this.checkInteriorIntersections()
}
getIntersections () {
return this._segInt.getIntersections()
}
isValid () {
this.execute()
return this._isValid
}
setFindAllIntersections (findAllIntersections) {
this._findAllIntersections = findAllIntersections
}
checkInteriorIntersections () {
this._isValid = true
this._segInt = new InteriorIntersectionFinder(this._li)
this._segInt.setFindAllIntersections(this._findAllIntersections)
const noder = new MCIndexNoder()
noder.setSegmentIntersector(this._segInt)
noder.computeNodes(this._segStrings)
if (this._segInt.hasIntersection()) {
this._isValid = false
return null
}
}
checkValid () {
this.execute()
if (!this._isValid) throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection())
}
getErrorMessage () {
if (this._isValid) return 'no intersections found'
const intSegs = this._segInt.getIntersectionSegments()
return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])
}
interfaces_ () {
return []
}
getClass () {
return FastNodingValidator
}
static computeIntersections (segStrings) {
const nv = new FastNodingValidator(segStrings)
nv.setFindAllIntersections(true)
nv.isValid()
return nv.getIntersections()
}
}