UNPKG

vue-cesium

Version:
1 lines 8.23 kB
{"version":3,"file":"EarthGravityModel1996.mjs","sources":["../../../../../../packages/components/controls/status-bar/EarthGravityModel1996.ts"],"sourcesContent":["interface EarthGravityModel1996 {\n gridFileUrl: string\n data: unknown\n minimumHeight: number\n maximumHeight: number\n}\n\nclass EarthGravityModel1996 {\n /**\n * The Earth Gravity Model 1996 (EGM96) geoid.\n * @param {String} gridFileUrl The URL of the WW15MGH.DAC file.\n */\n constructor(gridFileUrl) {\n this.gridFileUrl = gridFileUrl\n this.data = undefined\n\n // These values were determined by inspecting the WW15MGH.DAC file. We hard-code them here because\n // we need them available before that file finishes loading.\n this.minimumHeight = -106.99\n this.maximumHeight = 85.39\n }\n\n /**\n * Determines if this class will work in the current environment. It will return false on older browsers without support\n * for typed arrays.\n * @return {Boolean} True if this class may be used in this environment; otherwise, false.\n */\n isSupported() {\n return typeof Int16Array !== 'undefined' && typeof Uint8Array !== 'undefined'\n }\n\n /**\n * Gets the height of EGM96 above the surface of the ellipsoid.\n * @param {String} baseUrl The base URL for TerriaJS resources.\n * @param {Number} longitude The longitude.\n * @param {Number} latitude The latitude\n * @return {Promise|Number} A promise, that, when it results The height of mean sea level above the ellipsoid at the specified location. Negative numbers indicate that mean sea level\n * is below the ellipsoid.\n */\n getHeight(longitude, latitude) {\n return getHeightData(this).then(function (data) {\n return getHeightFromData(data, longitude, latitude)\n })\n }\n\n getHeights(cartographicArray) {\n return getHeightData(this).then(function (data) {\n for (let i = 0; i < cartographicArray.length; ++i) {\n const cartographic = cartographicArray[i]\n cartographic.height = getHeightFromData(data, cartographic.longitude, cartographic.latitude)\n }\n return cartographicArray\n })\n }\n}\n\nasync function getHeightData(model) {\n const { defined } = Cesium\n if (!defined(model.data)) {\n model.data = loadArrayBuffer(model.gridFileUrl)\n }\n let data = model.data\n if (model.data instanceof Promise) {\n data = await model.data\n }\n\n if (!(model.data instanceof Int16Array)) {\n // Data file is big-endian, all relevant platforms are little endian, so swap the byte order.\n const byteView = new Uint8Array(data)\n for (let k = 0; k < byteView.length; k += 2) {\n const tmp = byteView[k]\n byteView[k] = byteView[k + 1]\n byteView[k + 1] = tmp\n }\n model.data = new Int16Array(data)\n }\n\n return model.data\n}\n\nfunction getHeightFromData(data, longitude, latitude) {\n const { Math: CesiumMath } = Cesium\n let recordIndex = (720 * (CesiumMath.PI_OVER_TWO - latitude)) / Math.PI\n if (recordIndex < 0) {\n recordIndex = 0\n } else if (recordIndex > 720) {\n recordIndex = 720\n }\n\n longitude = CesiumMath.zeroToTwoPi(longitude)\n let heightIndex = (1440 * longitude) / CesiumMath.TWO_PI\n if (heightIndex < 0) {\n heightIndex = 0\n } else if (heightIndex > 1440) {\n heightIndex = 1440\n }\n\n const i = heightIndex | 0\n const j = recordIndex | 0\n\n const xMinusX1 = heightIndex - i\n const yMinusY1 = recordIndex - j\n const x2MinusX = 1.0 - xMinusX1\n const y2MinusY = 1.0 - yMinusY1\n\n const f11 = getHeightValue(data, j, i)\n const f21 = getHeightValue(data, j, i + 1)\n const f12 = getHeightValue(data, j + 1, i)\n const f22 = getHeightValue(data, j + 1, i + 1)\n\n return (f11 * x2MinusX * y2MinusY + f21 * xMinusX1 * y2MinusY + f12 * x2MinusX * yMinusY1 + f22 * xMinusX1 * yMinusY1) / 100.0\n}\n\n// Heights returned by this function are in centimeters.\nfunction getHeightValue(data, recordIndex, heightIndex) {\n if (recordIndex > 720) {\n recordIndex = 720\n } else if (recordIndex < 0) {\n recordIndex = 0\n }\n\n if (heightIndex > 1439) {\n heightIndex -= 1440\n } else if (heightIndex < 0) {\n heightIndex += 1440\n }\n\n return data[recordIndex * 1440 + heightIndex]\n}\n\nfunction loadArrayBuffer(urlOrResource) {\n const { Resource } = Cesium\n const resource = (Resource as any).createIfNeeded(urlOrResource)\n return resource.fetchArrayBuffer()\n}\n\nexport default EarthGravityModel1996\n"],"names":[],"mappings":"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"}