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
69 lines (67 loc) • 1.99 kB
JavaScript
import LineString from '../geom/LineString'
import Geometry from '../geom/Geometry'
import Coordinate from '../geom/Coordinate'
import Double from '../../../../java/lang/Double'
import GeometryCollection from '../geom/GeometryCollection'
export default class InteriorPointLine {
constructor () {
this._centroid = null
this._minDistance = Double.MAX_VALUE
this._interiorPoint = null
const g = arguments[0]
this._centroid = g.getCentroid().getCoordinate()
this.addInterior(g)
if (this._interiorPoint === null) this.addEndpoints(g)
}
addEndpoints () {
if (arguments[0] instanceof Geometry) {
const geom = arguments[0]
if (geom instanceof LineString) {
this.addEndpoints(geom.getCoordinates())
} else if (geom instanceof GeometryCollection) {
const gc = geom
for (let i = 0; i < gc.getNumGeometries(); i++) {
this.addEndpoints(gc.getGeometryN(i))
}
}
} else if (arguments[0] instanceof Array) {
const pts = arguments[0]
this.add(pts[0])
this.add(pts[pts.length - 1])
}
}
getInteriorPoint () {
return this._interiorPoint
}
addInterior () {
if (arguments[0] instanceof Geometry) {
const geom = arguments[0]
if (geom instanceof LineString) {
this.addInterior(geom.getCoordinates())
} else if (geom instanceof GeometryCollection) {
const gc = geom
for (let i = 0; i < gc.getNumGeometries(); i++) {
this.addInterior(gc.getGeometryN(i))
}
}
} else if (arguments[0] instanceof Array) {
const pts = arguments[0]
for (let i = 1; i < pts.length - 1; i++) {
this.add(pts[i])
}
}
}
add (point) {
const dist = point.distance(this._centroid)
if (dist < this._minDistance) {
this._interiorPoint = new Coordinate(point)
this._minDistance = dist
}
}
interfaces_ () {
return []
}
getClass () {
return InteriorPointLine
}
}