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
141 lines (132 loc) • 4.11 kB
JavaScript
import Geometry from './Geometry'
import CoordinateFilter from './CoordinateFilter'
import hasInterface from '../../../../hasInterface'
import GeometryComponentFilter from './GeometryComponentFilter'
import Dimension from './Dimension'
import GeometryFilter from './GeometryFilter'
import CoordinateSequenceFilter from './CoordinateSequenceFilter'
import Puntal from './Puntal'
import Envelope from './Envelope'
import Assert from '../util/Assert'
export default class Point extends Geometry {
constructor() {
super()
Point.constructor_.apply(this, arguments)
}
static constructor_() {
this._coordinates = null
const coordinates = arguments[0], factory = arguments[1]
Geometry.constructor_.call(this, factory)
this.init(coordinates)
}
computeEnvelopeInternal() {
if (this.isEmpty())
return new Envelope()
const env = new Envelope()
env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0))
return env
}
getCoordinates() {
return this.isEmpty() ? [] : [this.getCoordinate()]
}
copyInternal() {
return new Point(this._coordinates.copy(), this._factory)
}
equalsExact() {
if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {
const other = arguments[0], tolerance = arguments[1]
if (!this.isEquivalentClass(other))
return false
if (this.isEmpty() && other.isEmpty())
return true
if (this.isEmpty() !== other.isEmpty())
return false
return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)
} else {
return super.equalsExact.apply(this, arguments)
}
}
normalize() {}
getCoordinate() {
return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null
}
getBoundaryDimension() {
return Dimension.FALSE
}
reverseInternal() {
return this.getFactory().createPoint(this._coordinates.copy())
}
getTypeCode() {
return Geometry.TYPECODE_POINT
}
getDimension() {
return 0
}
getNumPoints() {
return this.isEmpty() ? 0 : 1
}
getX() {
if (this.getCoordinate() === null)
throw new IllegalStateException('getX called on empty Point')
return this.getCoordinate().x
}
compareToSameClass() {
if (arguments.length === 1) {
const other = arguments[0]
const point = other
return this.getCoordinate().compareTo(point.getCoordinate())
} else if (arguments.length === 2) {
const other = arguments[0], comp = arguments[1]
const point = other
return comp.compare(this._coordinates, point._coordinates)
}
}
apply() {
if (hasInterface(arguments[0], CoordinateFilter)) {
const filter = arguments[0]
if (this.isEmpty())
return null
filter.filter(this.getCoordinate())
} else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
const filter = arguments[0]
if (this.isEmpty()) return null
filter.filter(this._coordinates, 0)
if (filter.isGeometryChanged()) this.geometryChanged()
} else if (hasInterface(arguments[0], GeometryFilter)) {
const filter = arguments[0]
filter.filter(this)
} else if (hasInterface(arguments[0], GeometryComponentFilter)) {
const filter = arguments[0]
filter.filter(this)
}
}
getBoundary() {
return this.getFactory().createGeometryCollection()
}
getGeometryType() {
return Geometry.TYPENAME_POINT
}
getCoordinateSequence() {
return this._coordinates
}
getY() {
if (this.getCoordinate() === null)
throw new IllegalStateException('getY called on empty Point')
return this.getCoordinate().y
}
isEmpty() {
return this._coordinates.size() === 0
}
init(coordinates) {
if (coordinates === null)
coordinates = this.getFactory().getCoordinateSequenceFactory().create([])
Assert.isTrue(coordinates.size() <= 1)
this._coordinates = coordinates
}
isSimple() {
return true
}
get interfaces_() {
return [Puntal]
}
}