{
  "version": 3,
  "sources": ["../src/index.ts", "../src/geoid.ts", "../src/parse-pgm.ts"],
  "sourcesContent": ["// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {parsePGM} from './parse-pgm';\nexport {Geoid} from './geoid';\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/**\n * Code is ported from GeographicLib-1.50.1\n * https://geographiclib.sourceforge.io/html/index.html\n * Location: /GeographicLib-1.50.1/src/Geoid.cpp\n *           /GeographicLib-1.50.1/include/GeographicLib/Geoid.hpp\n *           /GeographicLib-1.50.1/src/Math.cpp\n *\n * File header:\n * * \\file Geoid.cpp (Geoid.hpp)\n * * \\brief Implementation for GeographicLib::Geoid class\n * *\n * * Copyright (c) Charles Karney (2009-2018) <charles@karney.com> and licensed\n * * under the MIT/X11 License.  For more information, see\n * * https://geographiclib.sourceforge.io/\n **********************************************************************/\n\nconst c0_ = 240;\n\n// prettier-ignore\nconst c3_ = [\n  9, -18, -88,    0,  96,   90,   0,   0, -60, -20,\n  -9,  18,   8,    0, -96,   30,   0,   0,  60, -20,\n  9, -88, -18,   90,  96,    0, -20, -60,   0,   0,\n  186, -42, -42, -150, -96, -150,  60,  60,  60,  60,\n  54, 162, -78,   30, -24,  -90, -60,  60, -60,  60,\n  -9, -32,  18,   30,  24,    0,  20, -60,   0,   0,\n  -9,   8,  18,   30, -96,    0, -20,  60,   0,   0,\n  54, -78, 162,  -90, -24,   30,  60, -60,  60, -60,\n  -54,  78,  78,   90, 144,   90, -60, -60, -60, -60,\n  9,  -8, -18,  -30, -24,    0,  20,  60,   0,   0,\n  -9,  18, -32,    0,  24,   30,   0,   0, -60,  20,\n  9, -18,  -8,    0, -24,  -30,   0,   0,  60,  20\n];\n\nconst c0n_ = 372;\n\n// prettier-ignore\nconst c3n_ = [\n  0, 0, -131, 0,  138,  144, 0,   0, -102, -31,\n  0, 0,    7, 0, -138,   42, 0,   0,  102, -31,\n  62, 0,  -31, 0,    0,  -62, 0,   0,    0,  31,\n  124, 0,  -62, 0,    0, -124, 0,   0,    0,  62,\n  124, 0,  -62, 0,    0, -124, 0,   0,    0,  62,\n  62, 0,  -31, 0,    0,  -62, 0,   0,    0,  31,\n  0, 0,   45, 0, -183,   -9, 0,  93,   18,   0,\n  0, 0,  216, 0,   33,   87, 0, -93,   12, -93,\n  0, 0,  156, 0,  153,   99, 0, -93,  -12, -93,\n  0, 0,  -45, 0,   -3,    9, 0,  93,  -18,   0,\n  0, 0,  -55, 0,   48,   42, 0,   0,  -84,  31,\n  0, 0,   -7, 0,  -48,  -42, 0,   0,   84,  31,\n];\n\nconst c0s_ = 372;\n\n// prettier-ignore\nconst c3s_ = [\n  18,  -36, -122,   0,  120,  135, 0,   0,  -84, -31,\n  -18,   36,   -2,   0, -120,   51, 0,   0,   84, -31,\n  36, -165,  -27,  93,  147,   -9, 0, -93,   18,   0,\n  210,   45, -111, -93,  -57, -192, 0,  93,   12,  93,\n  162,  141,  -75, -93, -129, -180, 0,  93,  -12,  93,\n  -36,  -21,   27,  93,   39,    9, 0, -93,  -18,   0,\n  0,    0,   62,   0,    0,   31, 0,   0,    0, -31,\n  0,    0,  124,   0,    0,   62, 0,   0,    0, -62,\n  0,    0,  124,   0,    0,   62, 0,   0,    0, -62,\n  0,    0,   62,   0,    0,   31, 0,   0,    0, -31,\n  -18,   36,  -64,   0,   66,   51, 0,   0, -102,  31,\n  18,  -36,    2,   0,  -66,  -51, 0,   0,  102,  31,\n];\nconst stencilsize_ = 12;\nconst nterms_ = ((3 + 1) * (3 + 2)) / 2; // for a cubic fit\nconst PIXEL_SIZE = 2;\n\nexport type GeoidProps = {\n  cubic: boolean;\n  _width: number;\n  _height: number;\n  _rlonres: number;\n  _rlatres: number;\n  _offset: number;\n  _scale: number;\n  _swidth: number;\n  _datastart: number;\n  _maxerror: number;\n  _rmserror: number;\n  _description: string;\n  _datetime: string;\n  data: Uint8Array;\n};\n\n/**\n * class Geoid - \"Gravity Height Model\"\n * Calculates difference between mean see level height and WGS84 ellipsoid height\n * Input data have to be loaded from \"Earth Gravity Model\" *.pgm file with \"PGMLoader\"\n * A particular model file can be loaded on https://geographiclib.sourceforge.io/html/geoid.html\n *\n * The implementation is ported from GeographicLib-1.50.1\n */\nexport class Geoid {\n  private _v00: number = 0;\n  private _v01: number = 0;\n  private _v10: number = 0;\n  private _v11: number = 0;\n  private _t: number[] = [];\n  private _ix: number;\n  private _iy: number;\n\n  options: GeoidProps;\n\n  /**\n   * @constructs\n   * Create a Geoid instance.\n   * @param options - object which includes parameters parsed from *.pgm header\n   * @param options.data - binary buffer of *.pgm file\n   */\n  constructor(options: GeoidProps) {\n    this.options = options;\n    this._ix = this.options._width;\n    this._iy = this.options._height;\n  }\n\n  /**\n   * Calculates difference between mean see level height and WGS84 ellipsoid height\n   * Code is ported from /GeographicLib-1.50.1/src/Geoid.cpp\n   * @param lat - latitude\n   * @param lon - longitude\n   * @returns height in meters\n   */\n  // eslint-disable-next-line max-statements, complexity\n  getHeight(lat: number, lon: number): number {\n    // C++: Math::LatFix(lat)\n    lat = Math.abs(lat) > 90 ? NaN : lat;\n\n    if (isNaN(lat) || isNaN(lon)) {\n      return NaN;\n    }\n\n    // C++: Math::AngNormalize(lon)\n    const rem = remainder(lon, 360);\n    lon = rem !== -180 ? rem : 180;\n\n    let fx = lon * this.options._rlonres;\n    let fy = -lat * this.options._rlatres;\n    let ix = Math.floor(fx);\n    let iy = Math.min(Math.round((this.options._height - 1) / 2 - 1), Math.floor(fy));\n    fx -= ix;\n    fy -= iy;\n    iy += (this.options._height - 1) / 2;\n    ix += ix < 0 ? this.options._width : ix >= this.options._width ? -this.options._width : 0;\n    let v00 = 0;\n    let v01 = 0;\n    let v10 = 0;\n    let v11 = 0;\n    let t: number[] = new Array<number>(nterms_);\n    if (!(ix === this._ix && iy === this._iy)) {\n      if (!this.options.cubic) {\n        v00 = this._rawval(ix, iy);\n        v01 = this._rawval(ix + 1, iy);\n        v10 = this._rawval(ix, iy + 1);\n        v11 = this._rawval(ix + 1, iy + 1);\n      } else {\n        const v = [\n          this._rawval(ix, iy - 1),\n          this._rawval(ix + 1, iy - 1),\n          this._rawval(ix - 1, iy),\n          this._rawval(ix, iy),\n          this._rawval(ix + 1, iy),\n          this._rawval(ix + 2, iy),\n          this._rawval(ix - 1, iy + 1),\n          this._rawval(ix, iy + 1),\n          this._rawval(ix + 1, iy + 1),\n          this._rawval(ix + 2, iy + 1),\n          this._rawval(ix, iy + 2),\n          this._rawval(ix + 1, iy + 2)\n        ];\n\n        let c3x = c3n_;\n        if (iy !== 0) {\n          c3x = iy === this.options._height - 2 ? c3s_ : c3_;\n        }\n        let c0x = c0n_;\n        if (iy !== 0) {\n          c0x = iy === this.options._height - 2 ? c0s_ : c0_;\n        }\n        for (let i = 0; i < nterms_; ++i) {\n          t[i] = 0;\n          // eslint-disable-next-line max-depth\n          for (let j = 0; j < stencilsize_; ++j) {\n            t[i] += v[j] * c3x[nterms_ * j + i];\n          }\n          t[i] /= c0x;\n        }\n      }\n    } else if (!this.options.cubic) {\n      // same cell; used cached coefficients\n      v00 = this._v00;\n      v01 = this._v01;\n      v10 = this._v10;\n      v11 = this._v11;\n    } else {\n      t = this._t;\n    }\n\n    if (!this.options.cubic) {\n      const a = (1 - fx) * v00 + fx * v01;\n      const b = (1 - fx) * v10 + fx * v11;\n      const c = (1 - fy) * a + fy * b;\n      const h = this.options._offset + this.options._scale * c;\n      this._ix = ix;\n      this._iy = iy;\n      this._v00 = v00;\n      this._v01 = v01;\n      this._v10 = v10;\n      this._v11 = v11;\n      return h;\n    }\n    let h =\n      t[0] +\n      fx * (t[1] + fx * (t[3] + fx * t[6])) +\n      fy * (t[2] + fx * (t[4] + fx * t[7]) + fy * (t[5] + fx * t[8] + fy * t[9]));\n    h = this.options._offset + this.options._scale * h;\n    this._ix = ix;\n    this._iy = iy;\n    this._t = t;\n    return h;\n  }\n\n  // PRIVATE\n\n  /**\n   * Method seeks for particular data in th pgm buffer\n   * Code is ported from corresponding method\n   * in /GeographicLib-1.50.1/include/GeographicLib/Geoid.hpp\n   * @param {number} ix - longituge parameter\n   * @param {number} iy - latitude parameter\n   * @returns {number} data from pgm binary buffer\n   */\n  private _rawval(ix: number, iy: number): number {\n    if (ix < 0) {\n      ix += this.options._width;\n    } else if (ix >= this.options._width) {\n      ix -= this.options._width;\n    }\n    if (iy < 0 || iy >= this.options._height) {\n      iy = iy < 0 ? -iy : 2 * (this.options._height - 1) - iy;\n      ix += ((ix < this.options._width / 2 ? 1 : -1) * this.options._width) / 2;\n    }\n    const bufferPosition = this.options._datastart + PIXEL_SIZE * (iy * this.options._swidth + ix);\n    // initial values to suppress warnings in case get fails\n    const a = this.options.data[bufferPosition];\n    const b = this.options.data[bufferPosition + 1];\n    const r = (a << 8) | b;\n    return r;\n  }\n}\n\n/**\n * Method calculates remainder of float numbers division\n * Code is ported from corresponding method\n * in /GeographicLib-1.50.1/src/Math.cpp\n * Math::remainder(T x, T y)\n * @param {number} x - numerator\n * @param {number} y - denominator\n * @returns {number} - remainder\n */\nfunction remainder(x: number, y: number): number {\n  y = Math.abs(y); // The result doesn't depend on the sign of y\n  let z = fmod(x, y);\n  if (2 * Math.abs(z) === y) z -= fmod(x, 2 * y) - z;\n  // Implement ties to even\n  else if (2 * Math.abs(z) > y) z += z < 0 ? y : -y; // Fold remaining cases to (-y/2, y/2)\n  return z;\n}\n\n/**\n * Computes the floating-point remainder of the division operation x/y\n * @param {number} x - numerator\n * @param {number} y - denominator\n * @returns {number} - remainder\n */\nfunction fmod(x: number, y: number): number {\n  return x - Math.floor(x / y) * y;\n}\n", "// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Parsing code is ported from GeographicLib-1.50.1: /GeographicLib-1.50.1/src/Geoid.cpp\n// https://geographiclib.sourceforge.io/html/index.html\n// Original code attribution:\n// Copyright (c) Charles Karney (2009-2018) <charles@karney.com> and licensed\n// under the MIT/X11 License.\n\nimport {Geoid} from './geoid';\n\nconst ENDL = 10;\nconst PIXEL_MAX = 65535;\n\n/**\n * Parse \"Earth Gravity Model\" loaded from a *.pgm file\n * https://geographiclib.sourceforge.io/html/geoid.html\n * @param {} data - binary buffer of pgm file\n * @param {Object} options - loader options\n * @returns {GeoidHeightModel} - instance of GeoidHeightModel class\n */\n// eslint-disable-next-line\nexport function parsePGM(\n  data: Uint8Array,\n  options: {\n    cubic?: boolean;\n  }\n) {\n  const getline = _getLineGenerator(data);\n  let currentLine = getline.next();\n  if (currentLine.done || currentLine.value.line !== 'P5') {\n    throw new Error('Geoid model file: File not in PGM format');\n  }\n  let _offset = Number.MAX_VALUE;\n  let _scale = 0;\n  let _maxerror = -1;\n  let _rmserror = -1;\n  let _description = 'NONE';\n  let _datetime = 'UNKNOWN';\n  let _width = 0;\n  let _height = 0;\n  let _datastart: number | null = null;\n  let _swidth: number | null = null;\n  do {\n    currentLine = getline.next();\n    const s = currentLine.value.line;\n    if (!s.length) {\n      continue; // eslint-disable-line no-continue\n    }\n    if (s[0] === '#') {\n      const sArr = s.split(' ');\n      const commentId = sArr[0];\n      const key = sArr[1];\n      if (commentId !== '#' || !key) {\n        continue; // eslint-disable-line no-continue\n      }\n      const infoArr = sArr.length > 2 ? sArr.slice(2) : [];\n      if (key === 'Description') {\n        _description = infoArr.join(' ');\n      } else if (key === 'DateTime') {\n        _datetime = infoArr.join(' ');\n      } else if (key === 'Offset') {\n        // eslint-disable-next-line max-depth\n        if (!sArr[2]) {\n          throw new Error('Geoid model file: Error reading offset');\n        }\n        _offset = parseInt(sArr[2], 10);\n      } else if (key === 'Scale') {\n        // eslint-disable-next-line max-depth\n        if (!sArr[2]) {\n          throw new Error('Geoid model file: Error reading scale');\n        }\n        _scale = parseFloat(sArr[2]);\n      } else if (key === (options.cubic ? 'MaxCubicError' : 'MaxBilinearError')) {\n        // It's not an error if the error can't be read\n        // eslint-disable-next-line max-depth\n        if (isFinite(parseFloat(sArr[2]))) {\n          _maxerror = parseFloat(sArr[2]);\n        }\n      } else if (key === (options.cubic ? 'RMSCubicError' : 'RMSBilinearError')) {\n        // It's not an error if the error can't be read\n        // eslint-disable-next-line max-depth\n        if (isFinite(parseFloat(sArr[2]))) {\n          _rmserror = parseFloat(sArr[2]);\n        }\n      }\n    } else {\n      let sArr = s.split(' ');\n      sArr = sArr.filter((testString) => testString !== '');\n      _width = parseInt(sArr[0], 10);\n      _height = parseInt(sArr[1], 10);\n      if (!(_width && _height)) {\n        throw new Error('Geoid model file: Error reading raster size');\n      }\n      break;\n    }\n  } while (!currentLine.done);\n\n  currentLine = getline.next();\n  const maxval = parseInt(currentLine.value.line, 10);\n  if (currentLine.done) {\n    throw new Error('Geoid model file: Error reading maxval');\n  }\n  if (maxval !== PIXEL_MAX) {\n    throw new Error('Geoid model file: Incorrect value of maxval');\n  }\n  // Add 1 for whitespace after maxval\n  _datastart = currentLine.value.offset;\n  _swidth = _width;\n\n  if (_offset === Number.MAX_VALUE) {\n    throw new Error('Geoid model file: Offset not set');\n  }\n  if (_scale === 0) {\n    throw new Error('Geoid model file: Scale not set');\n  }\n  if (_scale < 0) {\n    throw new Error('Geoid model file: Scale must be positive');\n  }\n  if (_height < 2 || _width < 2) {\n    // Coarsest grid spacing is 180deg.\n    throw new Error('Geoid model file: Raster size too small');\n  }\n  if (_width & 1) {\n    // This is so that longitude grids can be extended thru the poles.\n    throw new Error('Geoid model file: Raster width is odd');\n  }\n  if (!(_height & 1)) {\n    // This is so that latitude grid includes the equator.\n    throw new Error('Geoid model file: Raster height is even');\n  }\n\n  const _rlonres = _width / 360;\n  const _rlatres = (_height - 1) / 180;\n  return new Geoid({\n    cubic: options.cubic,\n    _width,\n    _height,\n    _rlonres,\n    _rlatres,\n    _offset,\n    _scale,\n    _swidth,\n    _datastart,\n    _maxerror,\n    _rmserror,\n    _description,\n    _datetime,\n    data\n  });\n}\n\n/**\n * Yields strings from pgm file (splitted by 10 - new line symbol)\n * @param {Uint8Array} data - binary buffer of pgm file\n * @returns {Generator}\n */\nfunction* _getLineGenerator(data: Uint8Array) {\n  let offset = 0;\n  do {\n    const endLineIndex = data.indexOf(ENDL, offset);\n    if (endLineIndex !== -1) {\n      const line = data.subarray(offset, endLineIndex);\n      offset = endLineIndex + 1;\n      yield {offset, line: _getStringFromCharArray(line)};\n    } else {\n      const line = data.subarray(offset, data.length);\n      offset = data.length;\n      yield {offset, line: _getStringFromCharArray(line)};\n    }\n  } while (offset < data.length);\n  return {offset, line: ''};\n}\n\n/**\n * Converts Uint8Array of char-codes to string\n * @param array - binary buffer of pgm file\n * @returns string\n */\nfunction _getStringFromCharArray(array: Uint8Array): string {\n  let s = '';\n  for (const char of array) {\n    s += String.fromCharCode(char);\n  }\n  return s;\n}\n"],
  "mappings": "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",
  "names": ["h"]
}
