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
87 lines (85 loc) • 3.04 kB
JavaScript
// import LocationIndexedLine from './LocationIndexedLine'
import LengthIndexOfPoint from './LengthIndexOfPoint'
import LocationIndexOfLine from './LocationIndexOfLine'
import LengthLocationMap from './LengthLocationMap'
import ExtractLineByLocation from './ExtractLineByLocation'
export default class LengthIndexedLine {
constructor () {
this._linearGeom = null
const linearGeom = arguments[0]
this._linearGeom = linearGeom
}
clampIndex (index) {
const posIndex = this.positiveIndex(index)
const startIndex = this.getStartIndex()
if (posIndex < startIndex) return startIndex
const endIndex = this.getEndIndex()
if (posIndex > endIndex) return endIndex
return posIndex
}
locationOf () {
if (arguments.length === 1) {
const index = arguments[0]
return LengthLocationMap.getLocation(this._linearGeom, index)
} else if (arguments.length === 2) {
const index = arguments[0]
const resolveLower = arguments[1]
return LengthLocationMap.getLocation(this._linearGeom, index, resolveLower)
}
}
project (pt) {
return LengthIndexOfPoint.indexOf(this._linearGeom, pt)
}
positiveIndex (index) {
if (index >= 0.0) return index
return this._linearGeom.getLength() + index
}
extractPoint () {
if (arguments.length === 1) {
const index = arguments[0]
const loc = LengthLocationMap.getLocation(this._linearGeom, index)
return loc.getCoordinate(this._linearGeom)
} else if (arguments.length === 2) {
const index = arguments[0]
const offsetDistance = arguments[1]
const loc = LengthLocationMap.getLocation(this._linearGeom, index)
const locLow = loc.toLowest(this._linearGeom)
return locLow.getSegment(this._linearGeom).pointAlongOffset(locLow.getSegmentFraction(), offsetDistance)
}
}
isValidIndex (index) {
return index >= this.getStartIndex() && index <= this.getEndIndex()
}
getEndIndex () {
return this._linearGeom.getLength()
}
getStartIndex () {
return 0.0
}
indexOfAfter (pt, minIndex) {
return LengthIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex)
}
extractLine (startIndex, endIndex) {
// const lil = new LocationIndexedLine(this._linearGeom)
const startIndex2 = this.clampIndex(startIndex)
const endIndex2 = this.clampIndex(endIndex)
const resolveStartLower = startIndex2 === endIndex2
const startLoc = this.locationOf(startIndex2, resolveStartLower)
const endLoc = this.locationOf(endIndex2)
return ExtractLineByLocation.extract(this._linearGeom, startLoc, endLoc)
}
indexOf (pt) {
return LengthIndexOfPoint.indexOf(this._linearGeom, pt)
}
indicesOf (subLine) {
const locIndex = LocationIndexOfLine.indicesOf(this._linearGeom, subLine)
const index = [LengthLocationMap.getLength(this._linearGeom, locIndex[0]), LengthLocationMap.getLength(this._linearGeom, locIndex[1])]
return index
}
interfaces_ () {
return []
}
getClass () {
return LengthIndexedLine
}
}