HilbertEncoder.js 968 B

1234567891011121314151617181920212223242526272829
  1. import HilbertCode from '../../shape/fractal/HilbertCode'
  2. export default class HilbertEncoder {
  3. constructor() {
  4. HilbertEncoder.constructor_.apply(this, arguments)
  5. }
  6. static constructor_() {
  7. this._level = null
  8. this._minx = null
  9. this._miny = null
  10. this._strideX = null
  11. this._strideY = null
  12. const level = arguments[0], extent = arguments[1]
  13. this._level = level
  14. const hside = Math.trunc(Math.pow(2, level)) - 1
  15. this._minx = extent.getMinX()
  16. const extentX = extent.getWidth()
  17. this._strideX = extentX / hside
  18. this._miny = extent.getMinX()
  19. const extentY = extent.getHeight()
  20. this._strideY = extentY / hside
  21. }
  22. encode(env) {
  23. const midx = env.getWidth() / 2 + env.getMinX()
  24. const x = Math.trunc((midx - this._minx) / this._strideX)
  25. const midy = env.getHeight() / 2 + env.getMinY()
  26. const y = Math.trunc((midy - this._miny) / this._strideY)
  27. return HilbertCode.encode(this._level, x, y)
  28. }
  29. }