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
361 lines (340 loc) • 11.1 kB
JavaScript
import Coordinate from './Coordinate'
import Comparable from '../../../../java/lang/Comparable'
import Serializable from '../../../../java/io/Serializable'
export default class Envelope {
constructor() {
Envelope.constructor_.apply(this, arguments)
}
static constructor_() {
this._minx = null
this._maxx = null
this._miny = null
this._maxy = null
if (arguments.length === 0) {
this.init()
} else if (arguments.length === 1) {
if (arguments[0] instanceof Coordinate) {
const p = arguments[0]
this.init(p.x, p.x, p.y, p.y)
} else if (arguments[0] instanceof Envelope) {
const env = arguments[0]
this.init(env)
}
} else if (arguments.length === 2) {
const p1 = arguments[0], p2 = arguments[1]
this.init(p1.x, p2.x, p1.y, p2.y)
} else if (arguments.length === 4) {
const x1 = arguments[0], x2 = arguments[1], y1 = arguments[2], y2 = arguments[3]
this.init(x1, x2, y1, y2)
}
}
static intersects() {
if (arguments.length === 3) {
const p1 = arguments[0], p2 = arguments[1], q = arguments[2]
if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y)))
return true
return false
} else if (arguments.length === 4) {
const p1 = arguments[0], p2 = arguments[1], q1 = arguments[2], q2 = arguments[3]
let minq = Math.min(q1.x, q2.x)
let maxq = Math.max(q1.x, q2.x)
let minp = Math.min(p1.x, p2.x)
let maxp = Math.max(p1.x, p2.x)
if (minp > maxq) return false
if (maxp < minq) return false
minq = Math.min(q1.y, q2.y)
maxq = Math.max(q1.y, q2.y)
minp = Math.min(p1.y, p2.y)
maxp = Math.max(p1.y, p2.y)
if (minp > maxq) return false
if (maxp < minq) return false
return true
}
}
getArea() {
return this.getWidth() * this.getHeight()
}
equals(other) {
if (!(other instanceof Envelope))
return false
const otherEnvelope = other
if (this.isNull())
return otherEnvelope.isNull()
return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()
}
intersection(env) {
if (this.isNull() || env.isNull() || !this.intersects(env)) return new Envelope()
const intMinX = this._minx > env._minx ? this._minx : env._minx
const intMinY = this._miny > env._miny ? this._miny : env._miny
const intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx
const intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy
return new Envelope(intMinX, intMaxX, intMinY, intMaxY)
}
isNull() {
return this._maxx < this._minx
}
getMaxX() {
return this._maxx
}
covers() {
if (arguments.length === 1) {
if (arguments[0] instanceof Coordinate) {
const p = arguments[0]
return this.covers(p.x, p.y)
} else if (arguments[0] instanceof Envelope) {
const other = arguments[0]
if (this.isNull() || other.isNull())
return false
return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy
}
} else if (arguments.length === 2) {
const x = arguments[0], y = arguments[1]
if (this.isNull()) return false
return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy
}
}
intersects() {
if (arguments.length === 1) {
if (arguments[0] instanceof Envelope) {
const other = arguments[0]
if (this.isNull() || other.isNull())
return false
return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)
} else if (arguments[0] instanceof Coordinate) {
const p = arguments[0]
return this.intersects(p.x, p.y)
}
} else if (arguments.length === 2) {
if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
const a = arguments[0], b = arguments[1]
if (this.isNull())
return false
const envminx = a.x < b.x ? a.x : b.x
if (envminx > this._maxx) return false
const envmaxx = a.x > b.x ? a.x : b.x
if (envmaxx < this._minx) return false
const envminy = a.y < b.y ? a.y : b.y
if (envminy > this._maxy) return false
const envmaxy = a.y > b.y ? a.y : b.y
if (envmaxy < this._miny) return false
return true
} else if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
const x = arguments[0], y = arguments[1]
if (this.isNull()) return false
return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)
}
}
}
getMinY() {
return this._miny
}
getDiameter() {
if (this.isNull())
return 0
const w = this.getWidth()
const h = this.getHeight()
return Math.sqrt(w * w + h * h)
}
getMinX() {
return this._minx
}
expandToInclude() {
if (arguments.length === 1) {
if (arguments[0] instanceof Coordinate) {
const p = arguments[0]
this.expandToInclude(p.x, p.y)
} else if (arguments[0] instanceof Envelope) {
const other = arguments[0]
if (other.isNull())
return null
if (this.isNull()) {
this._minx = other.getMinX()
this._maxx = other.getMaxX()
this._miny = other.getMinY()
this._maxy = other.getMaxY()
} else {
if (other._minx < this._minx)
this._minx = other._minx
if (other._maxx > this._maxx)
this._maxx = other._maxx
if (other._miny < this._miny)
this._miny = other._miny
if (other._maxy > this._maxy)
this._maxy = other._maxy
}
}
} else if (arguments.length === 2) {
const x = arguments[0], y = arguments[1]
if (this.isNull()) {
this._minx = x
this._maxx = x
this._miny = y
this._maxy = y
} else {
if (x < this._minx)
this._minx = x
if (x > this._maxx)
this._maxx = x
if (y < this._miny)
this._miny = y
if (y > this._maxy)
this._maxy = y
}
}
}
minExtent() {
if (this.isNull()) return 0.0
const w = this.getWidth()
const h = this.getHeight()
if (w < h) return w
return h
}
getWidth() {
if (this.isNull())
return 0
return this._maxx - this._minx
}
compareTo(o) {
const env = o
if (this.isNull()) {
if (env.isNull()) return 0
return -1
} else {
if (env.isNull()) return 1
}
if (this._minx < env._minx) return -1
if (this._minx > env._minx) return 1
if (this._miny < env._miny) return -1
if (this._miny > env._miny) return 1
if (this._maxx < env._maxx) return -1
if (this._maxx > env._maxx) return 1
if (this._maxy < env._maxy) return -1
if (this._maxy > env._maxy) return 1
return 0
}
translate(transX, transY) {
if (this.isNull())
return null
this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY)
}
copy() {
return new Envelope(this)
}
toString() {
return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'
}
setToNull() {
this._minx = 0
this._maxx = -1
this._miny = 0
this._maxy = -1
}
disjoint(other) {
if (this.isNull() || other.isNull())
return true
return other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny
}
getHeight() {
if (this.isNull())
return 0
return this._maxy - this._miny
}
maxExtent() {
if (this.isNull()) return 0.0
const w = this.getWidth()
const h = this.getHeight()
if (w > h) return w
return h
}
expandBy() {
if (arguments.length === 1) {
const distance = arguments[0]
this.expandBy(distance, distance)
} else if (arguments.length === 2) {
const deltaX = arguments[0], deltaY = arguments[1]
if (this.isNull()) return null
this._minx -= deltaX
this._maxx += deltaX
this._miny -= deltaY
this._maxy += deltaY
if (this._minx > this._maxx || this._miny > this._maxy) this.setToNull()
}
}
contains() {
if (arguments.length === 1) {
if (arguments[0] instanceof Envelope) {
const other = arguments[0]
return this.covers(other)
} else if (arguments[0] instanceof Coordinate) {
const p = arguments[0]
return this.covers(p)
}
} else if (arguments.length === 2) {
const x = arguments[0], y = arguments[1]
return this.covers(x, y)
}
}
centre() {
if (this.isNull()) return null
return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)
}
init() {
if (arguments.length === 0) {
this.setToNull()
} else if (arguments.length === 1) {
if (arguments[0] instanceof Coordinate) {
const p = arguments[0]
this.init(p.x, p.x, p.y, p.y)
} else if (arguments[0] instanceof Envelope) {
const env = arguments[0]
this._minx = env._minx
this._maxx = env._maxx
this._miny = env._miny
this._maxy = env._maxy
}
} else if (arguments.length === 2) {
const p1 = arguments[0], p2 = arguments[1]
this.init(p1.x, p2.x, p1.y, p2.y)
} else if (arguments.length === 4) {
const x1 = arguments[0], x2 = arguments[1], y1 = arguments[2], y2 = arguments[3]
if (x1 < x2) {
this._minx = x1
this._maxx = x2
} else {
this._minx = x2
this._maxx = x1
}
if (y1 < y2) {
this._miny = y1
this._maxy = y2
} else {
this._miny = y2
this._maxy = y1
}
}
}
getMaxY() {
return this._maxy
}
distance(env) {
if (this.intersects(env)) return 0
let dx = 0.0
if (this._maxx < env._minx) dx = env._minx - this._maxx; else if (this._minx > env._maxx) dx = this._minx - env._maxx
let dy = 0.0
if (this._maxy < env._miny) dy = env._miny - this._maxy; else if (this._miny > env._maxy) dy = this._miny - env._maxy
if (dx === 0.0) return dy
if (dy === 0.0) return dx
return Math.sqrt(dx * dx + dy * dy)
}
hashCode() {
let result = 17
result = 37 * result + Coordinate.hashCode(this._minx)
result = 37 * result + Coordinate.hashCode(this._maxx)
result = 37 * result + Coordinate.hashCode(this._miny)
result = 37 * result + Coordinate.hashCode(this._maxy)
return result
}
get interfaces_() {
return [Comparable, Serializable]
}
}