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
58 lines (56 loc) • 1.6 kB
JavaScript
import Coordinate from '../../geom/Coordinate'
import DoubleBits from './DoubleBits'
import Envelope from '../../geom/Envelope'
export default class Key {
constructor () {
this._pt = new Coordinate()
this._level = 0
this._env = null
const itemEnv = arguments[0]
this.computeKey(itemEnv)
}
getLevel () {
return this._level
}
computeKey () {
if (arguments.length === 1) {
const itemEnv = arguments[0]
this._level = Key.computeQuadLevel(itemEnv)
this._env = new Envelope()
this.computeKey(this._level, itemEnv)
while (!this._env.contains(itemEnv)) {
this._level += 1
this.computeKey(this._level, itemEnv)
}
} else if (arguments.length === 2) {
const level = arguments[0]
const itemEnv = arguments[1]
const quadSize = DoubleBits.powerOf2(level)
this._pt.x = Math.floor(itemEnv.getMinX() / quadSize) * quadSize
this._pt.y = Math.floor(itemEnv.getMinY() / quadSize) * quadSize
this._env.init(this._pt.x, this._pt.x + quadSize, this._pt.y, this._pt.y + quadSize)
}
}
getEnvelope () {
return this._env
}
getCentre () {
return new Coordinate((this._env.getMinX() + this._env.getMaxX()) / 2, (this._env.getMinY() + this._env.getMaxY()) / 2)
}
getPoint () {
return this._pt
}
interfaces_ () {
return []
}
getClass () {
return Key
}
static computeQuadLevel (env) {
const dx = env.getWidth()
const dy = env.getHeight()
const dMax = dx > dy ? dx : dy
const level = DoubleBits.exponent(dMax) + 1
return level
}
}