UNPKG

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

348 lines (346 loc) 10.3 kB
import Coordinate from './Coordinate' import Comparable from '../../../../java/lang/Comparable' import Serializable from '../../../../java/io/Serializable' export default class Envelope { 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) { let p = arguments[0] this.init(p.x, p.x, p.y, p.y) } else if (arguments[0] instanceof Envelope) { let env = arguments[0] this.init(env) } } else if (arguments.length === 2) { const p1 = arguments[0] const p2 = arguments[1] this.init(p1.x, p2.x, p1.y, p2.y) } else if (arguments.length === 4) { const x1 = arguments[0] const x2 = arguments[1] const y1 = arguments[2] const y2 = arguments[3] this.init(x1, x2, y1, y2) } } getArea () { return this.getWidth() * this.getHeight() } equals (other) { if (!(other instanceof Envelope)) { return false } var 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() var intMinX = this._minx > env._minx ? this._minx : env._minx var intMinY = this._miny > env._miny ? this._miny : env._miny var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx var 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) { let p = arguments[0] return this.covers(p.x, p.y) } else if (arguments[0] instanceof Envelope) { let 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] const 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) { const x = arguments[0] const 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 } getMinX () { return this._minx } expandToInclude () { if (arguments.length === 1) { if (arguments[0] instanceof Coordinate) { let p = arguments[0] this.expandToInclude(p.x, p.y) } else if (arguments[0] instanceof Envelope) { let 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] const 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 var w = this.getWidth() var h = this.getHeight() if (w < h) return w return h } getWidth () { if (this.isNull()) { return 0 } return this._maxx - this._minx } compareTo (o) { var 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) } toString () { return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']' } setToNull () { this._minx = 0 this._maxx = -1 this._miny = 0 this._maxy = -1 } 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] const 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] const 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) { let p = arguments[0] this.init(p.x, p.x, p.y, p.y) } else if (arguments[0] instanceof Envelope) { let 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] const p2 = arguments[1] this.init(p1.x, p2.x, p1.y, p2.y) } else if (arguments.length === 4) { const x1 = arguments[0] const x2 = arguments[1] const y1 = arguments[2] const 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 var dx = 0.0 if (this._maxx < env._minx) dx = env._minx - this._maxx; else if (this._minx > env._maxx) dx = this._minx - env._maxx var 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 () { var 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 } interfaces_ () { return [Comparable, Serializable] } getClass () { return Envelope } static intersects () { if (arguments.length === 3) { const p1 = arguments[0] const p2 = arguments[1] const 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] const p2 = arguments[1] const q1 = arguments[2] const 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 } } static get serialVersionUID () { return 5873921885273102420 } }