UNPKG

casc-cesium

Version:

Vue 3.x components for CesiumJS.

1 lines 8.33 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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"}