{"version":3,"file":"js/593.928f7122.js","mappings":"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","sources":["webpack://SatVis/./src/App.vue","webpack://SatVis/./src/App.vue?9d78","webpack://SatVis/./src/components/Satvis.vue","webpack://SatVis/./src/stores/cesium.js","webpack://SatVis/./src/stores/sat.js","webpack://SatVis/./src/components/SatelliteSelect.vue","webpack://SatVis/./src/components/SatelliteSelect.vue?44fd","webpack://SatVis/./src/modules/util/DeviceDetect.js","webpack://SatVis/./src/components/Satvis.vue?c47a","webpack://SatVis/./src/router/index.js","webpack://SatVis/./src/modules/util/pinia-plugin-url-sync.ts","webpack://SatVis/./src/modules/util/PushManager.js","webpack://SatVis/./src/modules/util/CesiumPerformanceStats.js","webpack://SatVis/./src/modules/Orbit.js","webpack://SatVis/./src/modules/util/CesiumSampledPositionRawValueAccess.js","webpack://SatVis/./src/modules/util/CesiumCallbackHelper.js","webpack://SatVis/./src/modules/SatelliteProperties.js","webpack://SatVis/./src/modules/util/CesiumComponentCollection.js","webpack://SatVis/./src/modules/util/CesiumTimelineHelper.js","webpack://SatVis/./src/modules/util/DescriptionHelper.js","webpack://SatVis/./src/modules/SatelliteComponentCollection.js","webpack://SatVis/./src/modules/GroundStationEntity.js","webpack://SatVis/./src/modules/util/CesiumCleanupHelper.js","webpack://SatVis/./src/modules/SatelliteManager.js","webpack://SatVis/./src/modules/CesiumController.js","webpack://SatVis/./src/app.js","webpack://SatVis/./src/css/infobox.ecss"],"sourcesContent":["\n\n\n","import { render } from \"./App.vue?vue&type=template&id=6a189f7d\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { defineStore } from \"pinia\";\n\nexport const useCesiumStore = defineStore(\"cesium\", {\n state: () => ({\n layers: [\"OfflineHighres\"],\n terrainProvider: \"None\",\n sceneMode: \"3D\",\n cameraMode: \"Fixed\",\n qualityPreset: \"high\",\n background: true,\n showFps: false,\n pickMode: false,\n }),\n urlsync: {\n enabled: true,\n config: [{\n name: \"layers\",\n url: \"layers\",\n serialize: (v) => v.join(\",\"),\n deserialize: (v) => v.split(\",\").filter((e) => e),\n valid: (v) => v.every((l) => [\"Offline\", \"OfflineHighres\", \"ArcGis\", \"OSM\", \"Topo\", \"BlackMarble\", \"Tiles\", \"GOES-IR\", \"Nextrad\"].includes(l.split(\"_\")[0])),\n default: [\"OfflineHighres\"],\n }, {\n name: \"terrainProvider\",\n url: \"terrain\",\n default: \"None\",\n }, {\n name: \"sceneMode\",\n url: \"scene\",\n default: \"3D\",\n }, {\n name: \"cameraMode\",\n url: \"camera\",\n default: \"Fixed\",\n }, {\n name: \"qualityPreset\",\n url: \"quality\",\n default: \"high\",\n }, {\n name: \"showFps\",\n url: \"fps\",\n default: \"false\",\n }, {\n name: \"background\",\n url: \"bg\",\n serialize: (v) => `${v}`,\n deserialize: (v) => v === \"true\",\n default: \"true\",\n }],\n },\n});\n","import { defineStore } from \"pinia\";\n\nexport const useSatStore = defineStore(\"sat\", {\n state: () => ({\n enabledComponents: [\"Point\", \"Label\"],\n availableSatellitesByTag: [],\n availableTags: [],\n enabledSatellites: [],\n enabledTags: [],\n groundStations: [],\n trackedSatellite: \"\",\n }),\n urlsync: {\n enabled: true,\n config: [{\n name: \"enabledComponents\",\n url: \"elements\",\n serialize: (v) => v.join(\",\").replaceAll(\" \", \"-\"),\n deserialize: (v) => v.replaceAll(\"-\", \" \").split(\",\").filter((e) => e),\n default: [\"Point\", \"Label\"],\n }, {\n name: \"enabledSatellites\",\n url: \"sats\",\n serialize: (v) => v.join(\",\").replaceAll(\" \", \"~\"),\n deserialize: (v) => v.replaceAll(\"~\", \" \").split(\",\").filter((e) => e),\n default: [],\n }, {\n name: \"enabledTags\",\n url: \"tags\",\n serialize: (v) => v.join(\",\").replaceAll(\" \", \"-\"),\n deserialize: (v) => v.replaceAll(\"-\", \" \").split(\",\").filter((e) => e),\n default: [],\n }, {\n name: \"groundStations\",\n url: \"gs\",\n serialize: (v) => v.map((gs) => `${gs.lat.toFixed(4)},${gs.lon.toFixed(4)}${gs.name ? `,${gs.name}` : \"\"}`).join(\"_\"),\n deserialize: (v) => v.split(\"_\").map((gs) => {\n const g = gs.split(\",\");\n return {\n lat: parseFloat(g[0], 10),\n lon: parseFloat(g[1], 10),\n name: g[2],\n };\n }),\n default: [],\n }, {\n name: \"trackedSatellite\",\n url: \"track\",\n default: \"\",\n }],\n },\n});\n","\n\n\n\n\n\n\n","import { render } from \"./SatelliteSelect.vue?vue&type=template&id=498b01ad&scoped=true\"\nimport script from \"./SatelliteSelect.vue?vue&type=script&lang=js\"\nexport * from \"./SatelliteSelect.vue?vue&type=script&lang=js\"\n\nimport \"./SatelliteSelect.vue?vue&type=style&index=0&id=498b01ad&scoped=true&lang=css\"\nimport \"./SatelliteSelect.vue?vue&type=style&index=1&id=498b01ad&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-498b01ad\"]])\n\nexport default __exports__","export class DeviceDetect {\n static inIframe() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n }\n\n static hasTouch() {\n return window.matchMedia(\"(pointer: coarse)\").matches;\n }\n\n static canHover() {\n return !window.matchMedia(\"(hover: none)\").matches;\n }\n\n static isIos() {\n const userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipad|ipod/.test(userAgent);\n }\n\n static isSafari() {\n const userAgent = window.navigator.userAgent.toLowerCase();\n return /safari/.test(userAgent);\n }\n\n static isInStandaloneMode() {\n return (\"standalone\" in window.navigator) && (window.navigator.standalone);\n }\n\n static isiPhoneWithNotch() {\n return this.isIos() && /iPhone X/.test(this.getiPhoneModel());\n }\n\n static isiPhoneWithNotchVisible() {\n return this.isiPhoneWithNotch() && (this.isInStandaloneMode() || !this.isSafari());\n }\n\n static getiPhoneModel() {\n // Detect iPhone model\n // Based on: https://51degrees.com/blog/website-optimisation-for-apple-devices-ipad-and-iphone\n const ratio = window.devicePixelRatio;\n if (window.screen.height / window.screen.width === 896 / 414) {\n switch (ratio) {\n case 2:\n return \"iPhone XR\";\n case 3:\n return \"iPhone XS Max\";\n default:\n return \"iPhone XR, iPhone XS Max\";\n }\n } else if (window.screen.height / window.screen.width === 812 / 375) {\n return \"iPhone X, iPhone XS\";\n } else if (window.screen.height / window.screen.width === 736 / 414) {\n return \"iPhone 6 Plus, 6s Plus, 7 Plus or 8 Plus\";\n } else if (window.screen.height / window.screen.width === 667 / 375) {\n if (ratio === 2) {\n return \"iPhone 6, 6s, 7 or 8\";\n }\n return \"iPhone 6 Plus, 6s Plus , 7 Plus or 8 Plus (display zoom)\";\n } else if (window.screen.height / window.screen.width === 1.775) {\n return \"iPhone 5, 5C, 5S, SE or 6, 6s, 7 and 8 (display zoom)\";\n } else if ((window.screen.height / window.screen.width === 1.5) && (ratio === 2)) {\n return \"iPhone 4 or 4s\";\n } else if ((window.screen.height / window.screen.width === 1.5) && (ratio === 1)) {\n return \"iPhone 1, 3G or 3GS\";\n } else {\n return \"Not an iPhone\";\n }\n }\n}\n","import { render } from \"./Satvis.vue?vue&type=template&id=1773e694\"\nimport script from \"./Satvis.vue?vue&type=script&lang=js\"\nexport * from \"./Satvis.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createRouter, createWebHistory } from \"vue-router\";\n\nimport Satvis from \"../components/Satvis.vue\";\n\nexport const router = createRouter({\n history: createWebHistory(document.location.pathname.match(\".*/\")[0]),\n routes: [\n { path: \"/\", component: Satvis },\n { path: \"/ot.html\", component: Satvis, alias: \"/ot\" },\n { path: \"/move.html\", component: Satvis, alias: \"/move\" },\n ],\n});\n","import { PiniaPluginContext } from \"pinia\";\n\nexport interface SyncConfigEntry {\n name: String; // Object name/path in pinia store\n url?: String; // Alternative name of url param, defaults to name\n serialize?: Function; // Convert state to url string\n deserialize?: Function; // Convert url string to state\n valid?: Function; // Run validation function after deserialization to filter invalid values\n default?: Any; // Default value (removes this value from url)\n}\nconst defaultSerialize = (v) => String(v);\nconst defaultDeserialize = (v) => String(v);\n\nfunction resolve(path, obj, separator = \".\") {\n const properties = Array.isArray(path) ? path : path.split(separator);\n return properties.reduce((prev, curr) => prev && prev[curr], obj);\n}\n\nfunction urlToState(store: Store, syncConfig: SyncConfigEntry[]): void {\n const { router, customConfig } = store;\n const route = router.currentRoute.value;\n store.defaults = {};\n\n // Override store default values with custom app config\n if (customConfig[store.$id]) {\n Object.entries(customConfig[store.$id]).forEach(([key, val]) => {\n store[key] = val;\n });\n };\n\n syncConfig.forEach((config: SyncConfigEntry) => {\n const param = config.url || config.name;\n const deserialize = config.deserialize || defaultDeserialize;\n\n // Save default value of merged app config\n store.defaults[config.name] = store[config.name];\n\n const query = { ...route.query };\n if (!(param in query)) {\n return;\n }\n try {\n console.info(\"Parse url param\", param, route.query[param]);\n const value = deserialize(query[param]);\n if (\"valid\" in config && !config.valid(value)) {\n throw new TypeError(\"Validation failed\");\n }\n // TODO: Resolve nested values\n store[config.name] = value;\n } catch (error) {\n console.error(`Invalid url param ${param} ${route.query[param]}: ${error}`);\n query[param] = undefined;\n router.replace({ query });\n }\n });\n}\n\nfunction stateToUrl(store: Store, syncConfig: SyncConfigEntry[]): void {\n const { router } = store;\n const route = router.currentRoute.value;\n\n const params = new URLSearchParams(location.search);\n syncConfig.forEach((config: SyncConfigEntry) => {\n const value = resolve(config.name, store);\n const param = config.url || config.name;\n const serialize = config.serialize || defaultSerialize;\n console.info(\"State update\", config.name, value);\n\n if (config.name in store.defaults && serialize(store.defaults[config.name]) === serialize(value)) {\n params.delete(param);\n } else {\n params.set(param, serialize(value));\n }\n });\n window.history.pushState({}, \"\", `?${params.toString().replaceAll(\"%2C\", \",\")}`);\n}\n\nfunction createUrlSync({ options, store }: PiniaPluginContext): void {\n // console.info(\"createUrlSync\", options);\n if (!options.urlsync?.enabled && !options.urlsync?.config) {\n return;\n }\n\n // Set state from url params on page load\n store.router.isReady().then(() => {\n urlToState(store, options.urlsync.config);\n });\n\n // Subscribe to store updates and sync them to url params\n store.$subscribe(() => {\n stateToUrl(store, options.urlsync.config);\n });\n}\n\nexport default createUrlSync;\n","import dayjs from \"dayjs\";\n\nexport class PushManager {\n constructor(options = {}) {\n this.options = options;\n this.timers = [];\n }\n\n get available() {\n if (\"webkit\" in window) {\n return true;\n }\n if (!(\"Notification\" in window) || !(\"ServiceWorkerRegistration\" in window)) {\n console.log(\"Notification API not supported!\");\n return false;\n }\n switch (Notification.permission) {\n case \"granted\":\n return true;\n case \"default\":\n this.requestPermission();\n return true;\n case \"denied\":\n return false;\n default:\n return false;\n }\n }\n\n requestPermission() {\n Notification.requestPermission((result) => {\n console.log(`Notifcation permission result: ${result}`);\n });\n }\n\n get active() {\n return this.timers.length > 0;\n }\n\n clearTimers() {\n this.timers.forEach((timer) => {\n clearTimeout(timer.id);\n });\n this.timers = [];\n }\n\n persistentNotification(message, options) {\n if (!this.available) {\n return;\n }\n const optionsMerged = { ...this.options, ...options };\n try {\n navigator.serviceWorker.getRegistration()\n .then((reg) => reg.showNotification(message, optionsMerged))\n .catch((err) => console.log(`Service Worker registration error: ${err}`));\n } catch (err) {\n console.log(`Notification API error: ${err}`);\n }\n }\n\n notifyInMs(ms, message, options) {\n if (!this.available) {\n return;\n }\n console.log(`Notify \"${message}\" in ${ms / 1000}s`);\n setTimeout(() => { this.persistentNotification(message, options); }, ms);\n }\n\n notifyAtDate(date, message, options) {\n if (!this.available) {\n return;\n }\n const waitMs = dayjs(date).diff(dayjs());\n if (waitMs < 0) {\n return;\n }\n if (this.timers.some((timer) => Math.abs(timer.date.diff(date, \"seconds\")) < 10)) {\n console.log(\"Ignore duplicate entry\");\n return;\n }\n console.log(`Notify \"${message}\" at ${date}s ${dayjs(date).unix()}`);\n\n if (\"webkit\" in window) {\n const content = {\n date: dayjs(date).unix(),\n delay: waitMs / 1000,\n message,\n };\n window.webkit.messageHandlers.iosNotify.postMessage(content);\n } else {\n const id = setTimeout(() => { this.persistentNotification(message, options); }, waitMs);\n this.timers.push({\n id,\n date,\n message,\n });\n }\n }\n}\n","import { getTimestamp } from \"cesium\";\n\n// A Cesium Performance Monitor that logs avarage and worst performance over a sample period\nexport class CesiumPerformanceStats {\n constructor(scene, logContinuously = false) {\n this.scene = scene;\n this.sampleCount = 60;\n this.idx = 0;\n this.postRenderTimes = [];\n this.discardNext = true;\n\n this.avgFps = 0;\n this.avgFrameTime = 0;\n this.worstFrameTime = 0;\n\n // Disable requestRenderMode to caclulate time betweeen consecutive postRender events\n // This is required as many updates happen during clock onTick events before scene.preUpdate is called\n this.scene.requestRenderMode = false;\n\n this.scene.preUpdate.addEventListener(() => {\n performance.mark(\"preUpdate\");\n });\n\n this.scene.postRender.addEventListener(() => {\n performance.mark(\"postRender\");\n this.postRenderTimes[this.idx] = getTimestamp();\n this.idx = (this.idx + 1) % this.sampleCount;\n if (this.idx === 0) {\n if (this.discardNext) {\n this.discardNext = false;\n } else {\n this.calculateStats();\n if (logContinuously) {\n console.log(this.formatStats());\n }\n }\n }\n performance.measure(\"SceneRender\", \"preUpdate\", \"postRender\");\n });\n }\n\n calculateStats() {\n this.worstFrameTime = 0;\n for (let i = 0; i < this.sampleCount - 1; i += 1) {\n const frametime = this.postRenderTimes[i + 1] - this.postRenderTimes[i];\n if (frametime > this.worstFrameTime) {\n this.worstFrameTime = frametime;\n }\n }\n const duration = this.postRenderTimes[this.sampleCount - 1] - this.postRenderTimes[0];\n this.avgFps = this.sampleCount / (duration / 1000);\n this.avgFrameTime = duration / this.sampleCount;\n }\n\n reset(discardNext = true) {\n this.idx = 0;\n this.discardNext = discardNext;\n this.avgFps = 0;\n this.avgFrameTime = 0;\n this.worstFrameTime = 0;\n }\n\n getStats() {\n return {\n avgFps: this.avgFps,\n avgFrameTime: this.avgFrameTime,\n worstFrameTime: this.worstFrameTime,\n };\n }\n\n formatStats() {\n const fmt = (n) => n.toFixed(2).padStart(8);\n return `Avg FPS: ${fmt(this.avgFps)}; Avg Frametime: ${fmt(this.avgFrameTime)}; Worst Frametime: ${fmt(this.worstFrameTime)};`;\n }\n}\n","import * as satellitejs from \"satellite.js\";\nimport dayjs from \"dayjs\";\n\nconst deg2rad = Math.PI / 180;\nconst rad2deg = 180 / Math.PI;\n\nexport default class Orbit {\n constructor(name, tle) {\n this.name = name;\n this.tle = tle.split(\"\\n\");\n this.satrec = satellitejs.twoline2satrec(this.tle[1], this.tle[2]);\n }\n\n get satnum() {\n return this.satrec.satnum;\n }\n\n get error() {\n return this.satrec.error;\n }\n\n get julianDate() {\n return this.satrec.jdsatepoch;\n }\n\n get orbitalPeriod() {\n const meanMotionRad = this.satrec.no;\n const period = (2 * Math.PI) / meanMotionRad;\n return period;\n }\n\n positionECI(time) {\n return satellitejs.propagate(this.satrec, time).position;\n }\n\n positionECF(time) {\n const positionEci = this.positionECI(time);\n const gmst = satellitejs.gstime(time);\n const positionEcf = satellitejs.eciToEcf(positionEci, gmst);\n return positionEcf;\n }\n\n positionGeodetic(timestamp, calculateVelocity = false) {\n const { position: positionEci, velocity: velocityVector } = satellitejs.propagate(this.satrec, timestamp);\n const gmst = satellitejs.gstime(timestamp);\n const positionGd = satellitejs.eciToGeodetic(positionEci, gmst);\n\n return {\n longitude: positionGd.longitude * rad2deg,\n latitude: positionGd.latitude * rad2deg,\n height: positionGd.height * 1000,\n ...(calculateVelocity && {\n velocity: Math.sqrt(velocityVector.x * velocityVector.x +\n velocityVector.y * velocityVector.y +\n velocityVector.z * velocityVector.z),\n }),\n };\n }\n\n computePassesElevation(\n groundStationPosition,\n startDate = dayjs().toDate(),\n endDate = dayjs(startDate).add(7, \"day\").toDate(),\n minElevation = 5,\n maxPasses = 50,\n ) {\n const groundStation = { ...groundStationPosition };\n groundStation.latitude *= deg2rad;\n groundStation.longitude *= deg2rad;\n groundStation.height /= 1000;\n\n const date = new Date(startDate);\n const passes = [];\n let pass = false;\n let ongoingPass = false;\n let lastElevation = 0;\n while (date < endDate) {\n const positionEcf = this.positionECF(date);\n const lookAngles = satellitejs.ecfToLookAngles(groundStation, positionEcf);\n const elevation = lookAngles.elevation / deg2rad;\n\n if (elevation > minElevation) {\n if (!ongoingPass) {\n // Start of new pass\n pass = {\n name: this.name,\n start: date.getTime(),\n azimuthStart: lookAngles.azimuth,\n maxElevation: elevation,\n azimuthApex: lookAngles.azimuth,\n };\n ongoingPass = true;\n } else if (elevation > pass.maxElevation) {\n // Ongoing pass\n pass.maxElevation = elevation;\n pass.apex = date.getTime();\n pass.azimuthApex = lookAngles.azimuth;\n }\n date.setSeconds(date.getSeconds() + 5);\n } else if (ongoingPass) {\n // End of pass\n pass.end = date.getTime();\n pass.duration = pass.end - pass.start;\n pass.azimuthEnd = lookAngles.azimuth;\n pass.azimuthStart /= deg2rad;\n pass.azimuthApex /= deg2rad;\n pass.azimuthEnd /= deg2rad;\n passes.push(pass);\n if (passes.length > maxPasses) {\n break;\n }\n ongoingPass = false;\n lastElevation = -180;\n date.setMinutes(date.getMinutes() + this.orbitalPeriod * 0.5);\n } else {\n const deltaElevation = elevation - lastElevation;\n lastElevation = elevation;\n if (deltaElevation < 0) {\n date.setMinutes(date.getMinutes() + this.orbitalPeriod * 0.5);\n lastElevation = -180;\n } else if (elevation < -20) {\n date.setMinutes(date.getMinutes() + 5);\n } else if (elevation < -5) {\n date.setMinutes(date.getMinutes() + 1);\n } else if (elevation < -1) {\n date.setSeconds(date.getSeconds() + 5);\n } else {\n date.setSeconds(date.getSeconds() + 2);\n }\n }\n }\n return passes;\n }\n}\n","import { SampledPositionProperty, binarySearch, JulianDate } from \"cesium\";\n/* eslint-disable func-names, no-underscore-dangle, no-bitwise */\n\n/**\n * Gets the original values stored in the sampled property for the provided timeframe.\n *\n * @param {JulianDate} start The start time for which to retrieve the values.\n * @param {JulianDate} end The end time for which to retrieve the values.\n * @returns {object} An array of all values within the provided timeframe.\n */\nSampledPositionProperty.prototype.getRawValues = function (start, end) {\n const times = this._property._times;\n if (times.length === 0) {\n return [];\n }\n const innerType = this._property._innerType;\n const values = this._property._values;\n\n let startIndex = binarySearch(times, start, JulianDate.compare);\n let endIndex = binarySearch(times, end, JulianDate.compare);\n if (startIndex < 0) {\n startIndex = ~startIndex;\n }\n if (endIndex < 0) {\n endIndex = ~endIndex;\n }\n const result = [];\n for (let i = startIndex; i < endIndex; i += 1) {\n result.push(innerType.unpack(values, i * innerType.packedLength));\n }\n return result;\n};\n\n/**\n * Gets the number of samples stored in the sampled property.\n *\n * @returns {number} The number of samples stored in the sampled property.\n */\nSampledPositionProperty.prototype.length = function () {\n return this._property._times.length;\n};\n","import * as Cesium from \"cesium\";\n\nexport class CesiumCallbackHelper {\n /**\n * Register an event listener that will execute a callback every refreshRate ticks of clock time.\n * @param {Cesium.Viewer} viewer - Cesium viewer\n * @param {Function} callback - function to execute\n * @param {Number} refreshRate - in ticks\n * @param {Cesium.Event} event - event to listen to (e.g. viewer.clock.onTick)\n * @returns {Function} - function to remove the event listener\n */\n static createPeriodicTickCallback(viewer, refreshRate, callback, event = viewer.clock.onTick) {\n let ticks = 0;\n return event.addEventListener(() => {\n if (ticks < refreshRate) {\n ticks += 1;\n return;\n }\n callback(viewer.clock.currentTime);\n ticks = 0;\n });\n }\n\n /**\n * Register an event listener that will execute a callback every refreshRate seconds of clock time.\n * @param {Cesium.Viewer} viewer - Cesium viewer\n * @param {Function} callback - function to execute\n * @param {Number} refreshRate - in seconds\n * @param {Cesium.Event} event - event to listen to (e.g. viewer.clock.onTick)\n * @returns {Function} - function to remove the event listener\n */\n static createPeriodicTimeCallback(viewer, refreshRate, callback, event = viewer.clock.onTick) {\n let lastUpdated = viewer.clock.currentTime;\n return event.addEventListener(() => {\n const time = viewer.clock.currentTime;\n const delta = Math.abs(Cesium.JulianDate.secondsDifference(time, lastUpdated));\n if (delta < refreshRate) {\n return;\n }\n callback(time);\n lastUpdated = time;\n });\n }\n}\n","import * as Cesium from \"@cesium/engine\";\n\nimport Orbit from \"./Orbit\";\nimport \"./util/CesiumSampledPositionRawValueAccess\";\n\nimport { CesiumCallbackHelper } from \"./util/CesiumCallbackHelper\";\n\nexport class SatelliteProperties {\n constructor(tle, tags = []) {\n this.name = tle.split(\"\\n\")[0].trim();\n if (tle.startsWith(\"0 \")) {\n this.name = this.name.substring(2);\n }\n this.orbit = new Orbit(this.name, tle);\n this.satnum = this.orbit.satnum;\n this.tags = tags;\n\n this.groundStations = [];\n this.passes = [];\n this.passInterval = undefined;\n this.passIntervals = new Cesium.TimeIntervalCollection();\n }\n\n hasTag(tag) {\n return this.tags.includes(tag);\n }\n\n addTags(tags) {\n this.tags = [...new Set(this.tags.concat(tags))];\n }\n\n position(time) {\n return this.sampledPosition.fixed.getValue(time);\n }\n\n getSampledPositionsForNextOrbit(start, reference = \"inertial\", loop = true) {\n const end = Cesium.JulianDate.addSeconds(start, this.orbit.orbitalPeriod * 60, new Cesium.JulianDate());\n const positions = this.sampledPosition[reference].getRawValues(start, end);\n if (loop) {\n // Readd the first position to the end of the array to close the loop\n return [...positions, positions[0]];\n }\n return positions;\n }\n\n createSampledPosition(viewer, callback) {\n this.updateSampledPosition(viewer.clock.currentTime);\n callback(this.sampledPosition);\n\n const samplingRefreshRate = (this.orbit.orbitalPeriod * 60) / 4;\n const removeCallback = CesiumCallbackHelper.createPeriodicTimeCallback(viewer, samplingRefreshRate, (time) => {\n this.updateSampledPosition(time);\n callback(this.sampledPosition);\n });\n return () => {\n removeCallback();\n this.sampledPosition = undefined;\n };\n }\n\n updateSampledPosition(time) {\n // Determine sampling interval based on sampled positions per orbit and orbital period\n // 120 samples per orbit seems to be a good compromise between performance and accuracy\n const samplingPointsPerOrbit = 120;\n const orbitalPeriod = this.orbit.orbitalPeriod * 60;\n const samplingInterval = orbitalPeriod / samplingPointsPerOrbit;\n // console.log(\"updateSampledPosition\", this.name, this.orbit.orbitalPeriod, samplingInterval.toFixed(2));\n\n // Always keep half an orbit backwards and 1.5 full orbits forward in the sampled position\n const request = new Cesium.TimeInterval({\n start: Cesium.JulianDate.addSeconds(time, -orbitalPeriod / 2, new Cesium.JulianDate()),\n stop: Cesium.JulianDate.addSeconds(time, orbitalPeriod * 1.5, new Cesium.JulianDate()),\n });\n\n // (Re)create sampled position if it does not exist or if it does not contain the current time\n if (!this.sampledPosition || !Cesium.TimeInterval.contains(this.sampledPosition.interval, time)) {\n this.initSampledPosition(request.start);\n }\n\n // Determine which parts of the requested interval are missing\n const intersect = Cesium.TimeInterval.intersect(this.sampledPosition.interval, request);\n const missingSecondsEnd = Cesium.JulianDate.secondsDifference(request.stop, intersect.stop);\n const missingSecondsStart = Cesium.JulianDate.secondsDifference(intersect.start, request.start);\n // console.log(`updateSampledPosition ${this.name}`,\n // `Missing ${missingSecondsStart.toFixed(2)}s ${missingSecondsEnd.toFixed(2)}s`,\n // `Request ${Cesium.TimeInterval.toIso8601(request, 0)}`,\n // `Current ${Cesium.TimeInterval.toIso8601(this.sampledPosition.interval, 0)}`,\n // `Intersect ${Cesium.TimeInterval.toIso8601(intersect, 0)}`,\n // );\n\n if (missingSecondsStart > 0) {\n const samplingStart = Cesium.JulianDate.addSeconds(intersect.start, -missingSecondsStart, new Cesium.JulianDate());\n const samplingStop = this.sampledPosition.interval.start;\n this.addSamples(samplingStart, samplingStop, samplingInterval);\n }\n if (missingSecondsEnd > 0) {\n const samplingStart = this.sampledPosition.interval.stop;\n const samplingStop = Cesium.JulianDate.addSeconds(intersect.stop, missingSecondsEnd, new Cesium.JulianDate());\n this.addSamples(samplingStart, samplingStop, samplingInterval);\n }\n\n // Remove no longer needed samples\n const removeBefore = new Cesium.TimeInterval({\n start: Cesium.JulianDate.fromIso8601(\"1957\"),\n stop: request.start,\n isStartIncluded: false,\n isStopIncluded: false,\n });\n const removeAfter = new Cesium.TimeInterval({\n start: request.stop,\n stop: Cesium.JulianDate.fromIso8601(\"2100\"),\n isStartIncluded: false,\n isStopIncluded: false,\n });\n this.sampledPosition.fixed.removeSamples(removeBefore);\n this.sampledPosition.inertial.removeSamples(removeBefore);\n this.sampledPosition.fixed.removeSamples(removeAfter);\n this.sampledPosition.inertial.removeSamples(removeAfter);\n\n this.sampledPosition.interval = request;\n }\n\n initSampledPosition(currentTime) {\n this.sampledPosition = {};\n this.sampledPosition.interval = new Cesium.TimeInterval({\n start: currentTime,\n stop: currentTime,\n isStartIncluded: false,\n isStopIncluded: false,\n });\n this.sampledPosition.fixed = new Cesium.SampledPositionProperty();\n this.sampledPosition.fixed.backwardExtrapolationType = Cesium.ExtrapolationType.HOLD;\n this.sampledPosition.fixed.forwardExtrapolationType = Cesium.ExtrapolationType.HOLD;\n this.sampledPosition.fixed.setInterpolationOptions({\n interpolationDegree: 5,\n interpolationAlgorithm: Cesium.LagrangePolynomialApproximation,\n });\n this.sampledPosition.inertial = new Cesium.SampledPositionProperty(Cesium.ReferenceFrame.INERTIAL);\n this.sampledPosition.inertial.backwardExtrapolationType = Cesium.ExtrapolationType.HOLD;\n this.sampledPosition.inertial.forwardExtrapolationType = Cesium.ExtrapolationType.HOLD;\n this.sampledPosition.inertial.setInterpolationOptions({\n interpolationDegree: 5,\n interpolationAlgorithm: Cesium.LagrangePolynomialApproximation,\n });\n this.sampledPosition.valid = true;\n }\n\n addSamples(start, stop, samplingInterval) {\n const times = [];\n const positionsFixed = [];\n const positionsInertial = [];\n for (let time = start; Cesium.JulianDate.compare(stop, time) >= 0; time = Cesium.JulianDate.addSeconds(time, samplingInterval, new Cesium.JulianDate())) {\n const { positionFixed, positionInertial } = this.computePosition(time);\n times.push(time);\n positionsFixed.push(positionFixed);\n positionsInertial.push(positionInertial);\n }\n // Add all samples at once as adding a sorted array avoids searching for the correct position every time\n this.sampledPosition.fixed.addSamples(times, positionsFixed);\n this.sampledPosition.inertial.addSamples(times, positionsInertial);\n }\n\n computePositionInertialTEME(time) {\n const eci = this.orbit.positionECI(Cesium.JulianDate.toDate(time));\n if (this.orbit.error) {\n this.sampledPosition.valid = false;\n return Cesium.Cartesian3.ZERO;\n }\n return new Cesium.Cartesian3(eci.x * 1000, eci.y * 1000, eci.z * 1000);\n }\n\n computePosition(timestamp) {\n const positionInertialTEME = this.computePositionInertialTEME(timestamp);\n\n const temeToFixed = Cesium.Transforms.computeTemeToPseudoFixedMatrix(timestamp);\n if (!Cesium.defined(temeToFixed)) {\n console.error(\"Reference frame transformation data failed to load\");\n }\n const positionFixed = Cesium.Matrix3.multiplyByVector(temeToFixed, positionInertialTEME, new Cesium.Cartesian3());\n\n const fixedToIcrf = Cesium.Transforms.computeFixedToIcrfMatrix(timestamp);\n if (!Cesium.defined(fixedToIcrf)) {\n console.error(\"Reference frame transformation data failed to load\");\n }\n const positionInertialICRF = Cesium.Matrix3.multiplyByVector(fixedToIcrf, positionFixed, new Cesium.Cartesian3());\n\n // Show computed sampled position\n // window.cc.viewer.entities.add({\n // //position: positionFixed,\n // position: new Cesium.ConstantPositionProperty(positionInertialICRF, Cesium.ReferenceFrame.INERTIAL),\n // point: {\n // pixelSize: 8,\n // color: Cesium.Color.TRANSPARENT,\n // outlineColor: Cesium.Color.YELLOW,\n // outlineWidth: 2,\n // }\n // });\n\n return { positionFixed, positionInertial: positionInertialICRF };\n }\n\n groundTrack(julianDate, samplesFwd = 2, samplesBwd = 0, interval = 600) {\n const groundTrack = [];\n\n const startTime = -samplesBwd * interval;\n const stopTime = samplesFwd * interval;\n for (let time = startTime; time <= stopTime; time += interval) {\n const timestamp = Cesium.JulianDate.addSeconds(julianDate, time, new Cesium.JulianDate());\n groundTrack.push(this.position(timestamp));\n }\n return groundTrack;\n }\n\n get groundStationAvailable() {\n return this.groundStations.length > 0;\n }\n\n updatePasses(time) {\n if (!this.groundStationAvailable) {\n return false;\n }\n // Check if still inside of current pass interval\n if (typeof this.passInterval !== \"undefined\" &&\n Cesium.TimeInterval.contains(new Cesium.TimeInterval({ start: this.passInterval.start, stop: this.passInterval.stop }), time)) {\n return false;\n }\n this.passInterval = {\n start: Cesium.JulianDate.addDays(time, -1, Cesium.JulianDate.clone(time)),\n stop: Cesium.JulianDate.addDays(time, 1, Cesium.JulianDate.clone(time)),\n stopPrediction: Cesium.JulianDate.addDays(time, 4, Cesium.JulianDate.clone(time)),\n };\n\n let allPasses = [];\n this.groundStations.forEach((groundStation) => {\n const passes = this.orbit.computePassesElevation(\n groundStation.position,\n Cesium.JulianDate.toDate(this.passInterval.start),\n Cesium.JulianDate.toDate(this.passInterval.stopPrediction),\n );\n passes.forEach((pass) => {\n pass.groundStationName = groundStation.name;\n });\n allPasses.push(...passes);\n });\n\n // Sort passes by time\n allPasses = allPasses.sort((a, b) => a.start - b.start);\n\n this.passes = allPasses;\n this.computePassIntervals();\n return true;\n }\n\n clearPasses() {\n this.passInterval = undefined;\n this.passes = [];\n this.passIntervals = new Cesium.TimeIntervalCollection();\n }\n\n computePassIntervals() {\n const passIntervalArray = this.passes.map((pass) => {\n const startJulian = Cesium.JulianDate.fromDate(new Date(pass.start));\n const endJulian = Cesium.JulianDate.fromDate(new Date(pass.end));\n return new Cesium.TimeInterval({\n start: startJulian,\n stop: endJulian,\n });\n });\n this.passIntervals = new Cesium.TimeIntervalCollection(passIntervalArray);\n }\n\n get swath() {\n // Hardcoded swath for certain satellites\n if ([\"SUOMI NPP\", \"NOAA 20 (JPSS-1)\", \"NOAA 21 (JPSS-2)\"].includes(this.name)) {\n return 3000;\n }\n if ([\"AQUA\", \"TERRA\"].includes(this.name)) {\n return 2330;\n }\n if (this.name.includes(\"SENTINEL-2\")) {\n return 290;\n }\n if (this.name.includes(\"SENTINEL-3\")) {\n return 740;\n }\n if (this.name.includes(\"LANDSAT\")) {\n return 185;\n }\n if (this.name.includes(\"FENGYUN\")) {\n return 2900;\n }\n if (this.name.includes(\"METOP\")) {\n return 2900;\n }\n return 200;\n }\n}\n","import * as Cesium from \"@cesium/engine\";\n\nimport { CesiumCallbackHelper } from \"./CesiumCallbackHelper\";\n\n/** CesiumComponentCollection\n *\n * A wrapper class for Cesium entities and primitives that all belong to a common object being represented.\n * The individual entities or primitives are created on demand by the inheriting child class and are added\n * to a common entity collection or primitive collection shared between all ComponentCollections.\n */\nexport class CesiumComponentCollection {\n #components = {};\n\n static geometries = [];\n\n static primitive = undefined;\n\n static primitivePendingUpdate = false;\n\n static primitivePendingCreation = false;\n\n constructor(viewer, lazy = true) {\n this.viewer = viewer;\n // Create entities only when needed and delete them on disable\n this.lazy = lazy;\n }\n\n get components() {\n return this.#components;\n }\n\n get componentNames() {\n return Object.keys(this.components);\n }\n\n get created() {\n return this.componentNames.length > 0;\n }\n\n show(componentNames = this.componentNames) {\n componentNames.forEach((componentName) => {\n this.enableComponent(componentName);\n });\n }\n\n hide(componentNames = this.componentNames) {\n componentNames.forEach((componentName) => {\n this.disableComponent(componentName);\n });\n }\n\n enableComponent(name) {\n if (!(name in this.components)) {\n return;\n }\n const component = this.components[name];\n if (component instanceof Cesium.Entity && !this.viewer.entities.contains(component)) {\n this.viewer.entities.add(component);\n } else if (component instanceof Cesium.Primitive && !this.viewer.scene.primitives.contains(component)) {\n this.viewer.scene.primitives.add(component);\n } else if (component instanceof Cesium.GeometryInstance) {\n this.constructor.geometries.push(component);\n this.recreateGeometryInstancePrimitive();\n }\n if (!this.defaultEntity) {\n this.defaultEntity = component;\n }\n }\n\n disableComponent(name) {\n if (!(name in this.components)) {\n return;\n }\n const component = this.components[name];\n if (component instanceof Cesium.Entity) {\n this.viewer.entities.remove(component);\n } else if (component instanceof Cesium.Primitive) {\n this.viewer.scene.primitives.remove(component);\n } else if (component instanceof Cesium.GeometryInstance) {\n this.constructor.geometries = this.constructor.geometries.filter((geometry) => geometry !== component);\n this.recreateGeometryInstancePrimitive();\n }\n if (this.lazy) {\n delete this.components[name];\n }\n }\n\n recreateGeometryInstancePrimitive() {\n if (this.constructor.primitivePendingUpdate) {\n return;\n }\n this.constructor.primitivePendingUpdate = true;\n const removeCallback = CesiumCallbackHelper.createPeriodicTickCallback(this.viewer, 30, () => {\n if (this.constructor.primitivePendingCreation) {\n return;\n }\n this.constructor.primitivePendingUpdate = false;\n if (this.constructor.geometries.length === 0) {\n this.viewer.scene.primitives.remove(this.constructor.primitive);\n this.constructor.primitive = undefined;\n this.viewer.scene.requestRender();\n return;\n }\n this.constructor.primitivePendingCreation = true;\n const primitive = new Cesium.Primitive({\n geometryInstances: this.constructor.geometries,\n appearance: new Cesium.PolylineColorAppearance(),\n });\n // Force asyncrounous primitve creation before adding to scene\n let lastState = -1;\n const readyCallback = this.viewer.clock.onTick.addEventListener(() => {\n if (!primitive.ready) {\n // eslint-disable-next-line no-underscore-dangle\n const state = primitive._state;\n if (state !== lastState) {\n lastState = state;\n // Trigger primitive update to progress through creation states\n primitive.update(this.viewer.scene.frameState);\n return;\n }\n return;\n }\n // Update model matrix right before adding to scene\n const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(this.viewer.clock.currentTime);\n if (Cesium.defined(icrfToFixed)) {\n primitive.modelMatrix = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n }\n if (this.constructor.primitive) {\n this.viewer.scene.primitives.remove(this.constructor.primitive);\n }\n this.viewer.scene.primitives.add(primitive);\n this.constructor.primitive = primitive;\n this.viewer.scene.requestRender();\n this.constructor.primitivePendingCreation = false;\n readyCallback();\n });\n removeCallback();\n });\n }\n\n /**\n * Returns an array of all components that are added to the viewer.\n * If component creation is\n */\n get visibleComponents() {\n return Object.values(this.components).filter((component) => {\n if (component instanceof Cesium.Entity) {\n return this.viewer.entities.contains(component);\n }\n if (component instanceof Cesium.Primitive) {\n return this.viewer.scene.primitives.contains(component);\n }\n return false;\n });\n }\n\n get isSelected() {\n return Object.values(this.components).some((entity) => this.viewer.selectedEntity === entity);\n }\n\n get isTracked() {\n return Object.values(this.components).some((entity) => this.viewer.trackedEntity === entity);\n }\n\n track(animate = false) {\n if (!this.defaultEntity) {\n return;\n }\n if (!animate) {\n this.viewer.trackedEntity = this.defaultEntity;\n return;\n }\n\n this.viewer.trackedEntity = undefined;\n const clockRunning = this.viewer.clock.shouldAnimate;\n this.viewer.clock.shouldAnimate = false;\n\n this.viewer.flyTo(this.defaultEntity, {\n offset: new Cesium.HeadingPitchRange(0, -Cesium.Math.PI_OVER_FOUR, 1580000),\n }).then((result) => {\n if (result) {\n this.viewer.trackedEntity = this.defaultEntity;\n this.viewer.clock.shouldAnimate = clockRunning;\n }\n });\n }\n\n setSelectedOnTickCallback(onTickCallback = () => {}, onUnselectCallback = () => {}) {\n const onTickEventRemovalCallback = this.viewer.clock.onTick.addEventListener((clock) => {\n onTickCallback(clock);\n });\n const onSelectedEntityChangedRemovalCallback = this.viewer.selectedEntityChanged.addEventListener(() => {\n onTickEventRemovalCallback();\n onSelectedEntityChangedRemovalCallback();\n onUnselectCallback();\n });\n }\n\n setTrackedOnTickCallback(onTickCallback = () => {}, onUntrackCallback = () => {}) {\n const onTickEventRemovalCallback = this.viewer.clock.onTick.addEventListener((clock) => {\n onTickCallback(clock);\n });\n const onTrackedEntityChangedRemovalCallback = this.viewer.trackedEntityChanged.addEventListener(() => {\n onTickEventRemovalCallback();\n onTrackedEntityChangedRemovalCallback();\n onUntrackCallback();\n });\n }\n\n artificiallyTrack(onTickCallback = () => {}, onUntrackCallback = () => {}) {\n const cameraTracker = new Cesium.EntityView(this.defaultEntity, this.viewer.scene, this.viewer.scene.globe.ellipsoid);\n this.setTrackedOnTickCallback((clock) => {\n cameraTracker.update(clock.currentTime);\n onTickCallback();\n }, () => {\n onUntrackCallback();\n // Restore default view angle if no new entity is tracked\n if (typeof this.viewer.trackedEntity === \"undefined\") {\n this.viewer.flyTo(this.defaultEntity, {\n offset: new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-90.0), 2000000),\n });\n }\n });\n }\n\n createCesiumEntity(componentName, entityKey, entityValue, name, description, position, moving) {\n const entity = new Cesium.Entity({\n name,\n description,\n position,\n viewFrom: new Cesium.Cartesian3(0, -3600000, 4200000),\n });\n\n if (moving) {\n entity.orientation = new Cesium.VelocityOrientationProperty(position);\n }\n\n entity[entityKey] = entityValue;\n this.components[componentName] = entity;\n }\n}\n","import * as Cesium from \"@cesium/engine\";\n\nexport class CesiumTimelineHelper {\n static clearHighlightRanges(viewer) {\n // eslint-disable-next-line\n if (!viewer.timeline || viewer.timeline._highlightRanges.length === 0) {\n return;\n }\n // eslint-disable-next-line\n viewer.timeline._highlightRanges = [];\n viewer.timeline.updateFromClock();\n viewer.timeline.zoomTo(viewer.clock.startTime, viewer.clock.stopTime);\n }\n\n static addHighlightRanges(viewer, ranges) {\n if (!viewer.timeline) {\n return;\n }\n ranges.forEach((range) => {\n const startJulian = Cesium.JulianDate.fromDate(new Date(range.start));\n const endJulian = Cesium.JulianDate.fromDate(new Date(range.end));\n const highlightRange = viewer.timeline.addHighlightRange(Cesium.Color.BLUE, 100, 0);\n highlightRange.setRange(startJulian, endJulian);\n viewer.timeline.updateFromClock();\n viewer.timeline.zoomTo(viewer.clock.startTime, viewer.clock.stopTime);\n });\n }\n\n static updateHighlightRanges(viewer, ranges) {\n this.clearHighlightRanges(viewer);\n this.addHighlightRanges(viewer, ranges);\n }\n}\n","import * as Cesium from \"@cesium/engine\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport utc from \"dayjs/plugin/utc\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(utc);\n\nexport class DescriptionHelper {\n /** cachedCallbackProperty\n * Caches the results of a callback property to prevent unnecessary recalculation.\n * @param {function} callback - The amount of simulation time to use the calculated result\n * @param {number} updateTreshold - The amount of simulation time to use the calculated result\n * @param {number} usageTreshold - The number of invocations to serve the same result\n */\n static cachedCallbackProperty(callback, updateTreshold = 1, usageTreshold = 1000) {\n let cache;\n return new Cesium.CallbackProperty((time) => {\n if (cache && Cesium.JulianDate.equalsEpsilon(time, cache.time, updateTreshold) && cache.usage < usageTreshold) {\n // console.log(\"Cached callback\", time, cache.usage);\n cache.usage += 1;\n return cache.content;\n }\n const content = callback(time);\n cache = {\n time,\n content,\n usage: 0,\n };\n return content;\n }, false);\n }\n\n static renderSatelliteDescription(time, position, props) {\n const { name, passes, orbit } = props;\n const { tle, julianDate } = orbit;\n const description = `\n
\n

Position

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
NameLatitudeLongitudeAltitudeVelocity
${name}${position.latitude.toFixed(2)}°${position.longitude.toFixed(2)}°${(position.height / 1000).toFixed(2)} km${position.velocity.toFixed(2)} km/s
\n ${this.renderPasses(passes, time, false)}\n ${this.renderTLE(tle, julianDate)}\n
\n `;\n return description;\n }\n\n static renderGroundstationDescription(time, name, position, passes) {\n const description = `\n
\n

Position

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
NameLatitudeLongitude
${name}${position.latitude.toFixed(2)}°${position.longitude.toFixed(2)}°
\n ${this.renderPasses(passes, time, true)}\n
\n `;\n return description;\n }\n\n static renderPasses(passes, time, isGroundStation) {\n if (passes.length === 0) {\n if (isGroundStation) {\n return `\n

Passes

\n
No passes available
\n `;\n }\n return `\n

Passes

\n
No ground station set
\n `;\n }\n\n const start = dayjs(time);\n const upcomingPassIdx = passes.findIndex((pass) => dayjs(pass.end).isAfter(start));\n if (upcomingPassIdx < 0) {\n return \"\";\n }\n const upcomingPasses = passes.slice(upcomingPassIdx);\n\n const passNameField = isGroundStation ? \"name\" : \"groundStationName\";\n const htmlName = passNameField ? \"Name\\n\" : \"\";\n const html = `\n

Passes

\n \n \n \n ${htmlName}\n \n \n \n \n \n \n \n \n ${upcomingPasses.map((pass) => this.renderPass(start, pass, passNameField)).join(\"\")}\n \n
CountdownStartEndElAz
\n `;\n return html;\n }\n\n static renderPass(time, pass, passNameField = \"name\") {\n function pad2(num) {\n return String(num).padStart(2, \"0\");\n }\n let countdown = \"ONGOING\";\n if (dayjs(pass.end).diff(time) < 0) {\n countdown = \"PREVIOUS\";\n } else if (dayjs(pass.start).diff(time) > 0) {\n countdown = `${pad2(dayjs(pass.start).diff(time, \"days\"))}:${pad2(dayjs(pass.start).diff(time, \"hours\") % 24)}:${pad2(dayjs(pass.start).diff(time, \"minutes\") % 60)}:${pad2(dayjs(pass.start).diff(time, \"seconds\") % 60)}`;\n }\n const htmlName = passNameField ? `${pass[passNameField]}\\n` : \"\";\n const html = `\n \n ${htmlName}\n ${countdown}\n ${dayjs.utc(pass.start).format(\"DD.MM HH:mm:ss\")}\n ${dayjs.utc(pass.end).format(\"HH:mm:ss\")}\n ${pass.maxElevation.toFixed(0)}°\n ${pass.azimuthApex.toFixed(2)}°\n \n `;\n return html;\n }\n\n static renderTLE(tle, julianDate) {\n const julianDayNumber = Math.floor(julianDate);\n const secondsOfDay = (julianDate - julianDayNumber) * 60 * 60 * 24;\n const tleDate = new Cesium.JulianDate(julianDayNumber, secondsOfDay);\n const formattedDate = dayjs.utc(tleDate).format(\"YYYY-MM-DD HH:mm:ss\");\n const html = `\n

TLE (Epoch ${formattedDate})

\n
${tle.slice(1, 3).join(\"\\n\")}
`;\n return html;\n }\n}\n","import * as Cesium from \"@cesium/engine\";\nimport CesiumSensorVolumes from \"cesium-sensor-volumes\";\n\nimport { SatelliteProperties } from \"./SatelliteProperties\";\nimport { CesiumComponentCollection } from \"./util/CesiumComponentCollection\";\nimport { CesiumTimelineHelper } from \"./util/CesiumTimelineHelper\";\nimport { DescriptionHelper } from \"./util/DescriptionHelper\";\nimport { CesiumCallbackHelper } from \"./util/CesiumCallbackHelper\";\n\nexport class SatelliteComponentCollection extends CesiumComponentCollection {\n constructor(viewer, tle, tags) {\n super(viewer);\n this.props = new SatelliteProperties(tle, tags);\n this.eventListeners = {};\n }\n\n enableComponent(name) {\n if (!this.created) {\n this.init();\n }\n if (!this.props.sampledPosition.valid) {\n console.error(`No valid position data available for ${this.props.name}`);\n return;\n }\n if (!(name in this.components)) {\n this.createComponent(name);\n this.updatedSampledPositionForComponents();\n }\n\n super.enableComponent(name);\n\n if (name === \"3D model\") {\n // Adjust label offset to avoid overlap with model\n if (this.components.Label) {\n this.components.Label.label.pixelOffset = new Cesium.Cartesian2(20, 0);\n }\n } else if (name === \"Orbit\" && this.components[name] instanceof Cesium.Primitive) {\n // Update the model matrix periodically to keep the orbit in the inertial frame\n if (!this.orbitPrimitiveUpdater) {\n this.orbitPrimitiveUpdater = CesiumCallbackHelper.createPeriodicTimeCallback(this.viewer, 0.5, (time) => {\n if (!this.components.Orbit) {\n // Remove callback if orbit is disabled\n this.orbitPrimitiveUpdater();\n return;\n }\n const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);\n if (Cesium.defined(icrfToFixed)) {\n this.components.Orbit.modelMatrix = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n }\n });\n }\n } else if (name === \"Orbit\" && this.components[name] instanceof Cesium.GeometryInstance) {\n // Update the model matrix of the primitive containing all orbit geometries periodically to keep the orbit in the inertial frame\n if (!this.constructor.geometryPrimitiveUpdater) {\n if (!this.components.Orbit) {\n // Remove callback if orbit is disabled\n this.geometryPrimitiveUpdater();\n return;\n }\n this.constructor.geometryPrimitiveUpdater = CesiumCallbackHelper.createPeriodicTimeCallback(this.viewer, 0.5, (time) => {\n const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);\n if (Cesium.defined(icrfToFixed) && this.constructor.primitive) {\n this.constructor.primitive.modelMatrix = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n }\n });\n }\n }\n }\n\n disableComponent(name) {\n if (name === \"3D model\") {\n // Restore old label offset\n if (this.components.Label) {\n this.components.Label.label.pixelOffset = new Cesium.Cartesian2(10, 0);\n }\n }\n super.disableComponent(name);\n\n if (this.componentNames.length === 0) {\n // Remove event listeners when no components are enabled\n this.deinit();\n }\n }\n\n init() {\n this.createDescription();\n\n this.eventListeners.sampledPosition = this.props.createSampledPosition(this.viewer, () => {\n this.updatedSampledPositionForComponents(true);\n });\n\n // Set up event listeners\n this.eventListeners.selectedEntity = this.viewer.selectedEntityChanged.addEventListener((entity) => {\n if (!entity || entity?.name === \"Ground station\") {\n CesiumTimelineHelper.clearHighlightRanges(this.viewer);\n return;\n }\n if (this.isSelected) {\n this.props.updatePasses(this.viewer.clock.currentTime);\n CesiumTimelineHelper.updateHighlightRanges(this.viewer, this.props.passes);\n }\n });\n\n this.eventListeners.trackedEntity = this.viewer.trackedEntityChanged.addEventListener(() => {\n if (this.isTracked) {\n this.artificiallyTrack();\n }\n if (\"Orbit\" in this.components && !this.isCorrectOrbitComponent()) {\n // Recreate Orbit to change visualisation type\n this.disableComponent(\"Orbit\");\n this.enableComponent(\"Orbit\");\n }\n });\n }\n\n deinit() {\n // Remove event listeners\n this.eventListeners.sampledPosition();\n this.eventListeners.selectedEntity();\n this.eventListeners.trackedEntity();\n }\n\n updatedSampledPositionForComponents(update = false) {\n const { fixed, inertial } = this.props.sampledPosition;\n\n Object.entries(this.components).forEach(([type, component]) => {\n if (type === \"Orbit\") {\n component.position = inertial;\n if (update && (component instanceof Cesium.Primitive || component instanceof Cesium.GeometryInstance)) {\n // Primitives need to be recreated to update the geometry\n this.disableComponent(\"Orbit\");\n this.enableComponent(\"Orbit\");\n }\n } else if (type === \"Sensor cone\") {\n component.position = fixed;\n component.orientation = new Cesium.CallbackProperty((time) => {\n const position = this.props.position(time);\n const hpr = new Cesium.HeadingPitchRoll(0, Cesium.Math.toRadians(180), 0);\n return Cesium.Transforms.headingPitchRollQuaternion(position, hpr);\n }, false);\n } else {\n component.position = fixed;\n component.orientation = new Cesium.VelocityOrientationProperty(fixed);\n }\n });\n // Request a single frame after satellite position updates when the clock is paused\n if (!this.viewer.clock.shouldAnimate) {\n const removeCallback = this.viewer.clock.onTick.addEventListener(() => {\n this.viewer.scene.requestRender();\n removeCallback();\n });\n }\n }\n\n createComponent(name) {\n switch (name) {\n case \"Point\":\n this.createPoint();\n break;\n case \"Label\":\n this.createLabel();\n break;\n case \"Orbit\":\n this.createOrbit();\n break;\n case \"Orbit track\":\n this.createOrbitTrack();\n break;\n case \"Ground track\":\n this.createGroundTrack();\n break;\n case \"Sensor cone\":\n this.createCone();\n break;\n case \"3D model\":\n this.createModel();\n break;\n case \"Ground station link\":\n this.createGroundStationLink();\n break;\n default:\n console.error(\"Unknown component\");\n }\n }\n\n createDescription() {\n this.description = DescriptionHelper.cachedCallbackProperty((time) => {\n const cartographic = this.props.orbit.positionGeodetic(Cesium.JulianDate.toDate(time), true);\n const content = DescriptionHelper.renderSatelliteDescription(time, cartographic, this.props);\n return content;\n });\n }\n\n createCesiumSatelliteEntity(entityName, entityKey, entityValue) {\n this.createCesiumEntity(entityName, entityKey, entityValue, this.props.name, this.description, this.props.sampledPosition.fixed, true);\n }\n\n createPoint() {\n const point = new Cesium.PointGraphics({\n pixelSize: 6,\n color: Cesium.Color.WHITE,\n outlineColor: Cesium.Color.DIMGREY,\n outlineWidth: 1,\n });\n this.createCesiumSatelliteEntity(\"Point\", \"point\", point);\n }\n\n createBox() {\n const size = 1000;\n const box = new Cesium.BoxGraphics({\n dimensions: new Cesium.Cartesian3(size, size, size),\n material: Cesium.Color.WHITE,\n });\n this.createCesiumSatelliteEntity(\"Box\", \"box\", box);\n }\n\n createModel() {\n const model = new Cesium.ModelGraphics({\n uri: `./data/models/${this.props.name.split(\" \").join(\"-\")}.glb`,\n minimumPixelSize: 50,\n maximumScale: 10000,\n });\n this.createCesiumSatelliteEntity(\"3D model\", \"model\", model);\n }\n\n createLabel() {\n const label = new Cesium.LabelGraphics({\n text: this.props.name,\n font: \"15px Arial\",\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\n outlineColor: Cesium.Color.DIMGREY,\n outlineWidth: 2,\n horizontalOrigin: Cesium.HorizontalOrigin.LEFT,\n pixelOffset: new Cesium.Cartesian2(10, 0),\n distanceDisplayCondition: new Cesium.DistanceDisplayCondition(2000, 8e7),\n translucencyByDistance: new Cesium.NearFarScalar(6e7, 1.0, 8e7, 0.0),\n });\n this.createCesiumSatelliteEntity(\"Label\", \"label\", label);\n }\n\n createOrbit() {\n if (this.usePathGraphicForOrbit) {\n this.createOrbitPath();\n } else {\n this.createOrbitPolylineGeometry();\n }\n }\n\n isCorrectOrbitComponent() {\n return this.usePathGraphicForOrbit ? this.components.Orbit instanceof Cesium.Entity : this.components.Orbit instanceof Cesium.Primitive;\n }\n\n get usePathGraphicForOrbit() {\n const sceneModeSupportsPrimitive = this.viewer.scene.mode === Cesium.SceneMode.SCENE3D;\n if (this.isTracked || !sceneModeSupportsPrimitive) {\n // Use a path graphic to visualize the currently tracked satellite's orbit or when the scene mode doesn't support primitive modelmatrix updates\n return true;\n }\n // For all other satellites use a polyline geometry to visualize the orbit for significantly improved performance.\n // A polyline geometry is used instead of a polyline graphic as entities don't support adjusting the model matrix\n // in order to display the orbit in the inertial frame.\n return false;\n }\n\n createOrbitPath() {\n const path = new Cesium.PathGraphics({\n leadTime: (this.props.orbit.orbitalPeriod * 60) / 2 + 5,\n trailTime: (this.props.orbit.orbitalPeriod * 60) / 2 + 5,\n material: Cesium.Color.WHITE.withAlpha(0.15),\n resolution: 600,\n width: 2,\n });\n this.createCesiumEntity(\"Orbit\", \"path\", path, this.props.name, this.description, this.props.sampledPosition.inertial, true);\n }\n\n createOrbitPolylinePrimitive() {\n const primitive = new Cesium.Primitive({\n geometryInstances: new Cesium.GeometryInstance({\n geometry: new Cesium.PolylineGeometry({\n positions: this.props.getSampledPositionsForNextOrbit(this.viewer.clock.currentTime),\n width: 2,\n arcType: Cesium.ArcType.NONE,\n // granularity: Cesium.Math.RADIANS_PER_DEGREE * 10,\n vertexFormat: Cesium.PolylineColorAppearance.VERTEX_FORMAT,\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 0.15)),\n },\n id: this.props.name,\n }),\n appearance: new Cesium.PolylineColorAppearance(),\n asynchronous: false,\n });\n const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(this.viewer.clock.currentTime);\n if (Cesium.defined(icrfToFixed)) {\n // TODO: Cache the model matrix\n primitive.modelMatrix = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n }\n this.components.Orbit = primitive;\n }\n\n createOrbitPolylineGeometry() {\n // Currently unused\n const geometryInstance = new Cesium.GeometryInstance({\n geometry: new Cesium.PolylineGeometry({\n positions: this.props.getSampledPositionsForNextOrbit(this.viewer.clock.currentTime),\n width: 2,\n arcType: Cesium.ArcType.NONE,\n // granularity: Cesium.Math.RADIANS_PER_DEGREE * 10,\n vertexFormat: Cesium.PolylineColorAppearance.VERTEX_FORMAT,\n }),\n attributes: {\n color: Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 0.15)),\n },\n id: this.props.name,\n });\n this.components.Orbit = geometryInstance;\n }\n\n createOrbitTrack(leadTime = this.props.orbit.orbitalPeriod * 60, trailTime = 0) {\n const path = new Cesium.PathGraphics({\n leadTime,\n trailTime,\n material: Cesium.Color.GOLD.withAlpha(0.15),\n resolution: 600,\n width: 2,\n });\n this.createCesiumSatelliteEntity(\"Orbit track\", \"path\", path);\n }\n\n createGroundTrack() {\n if (this.props.orbit.orbitalPeriod > 60 * 2) {\n // Ground track unavailable for non-LEO satellites\n return;\n }\n const corridor = new Cesium.CorridorGraphics({\n cornerType: Cesium.CornerType.MITERED,\n height: 1000,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n material: Cesium.Color.DARKRED.withAlpha(0.25),\n positions: new Cesium.CallbackProperty((time) => this.props.groundTrack(time), false),\n width: this.props.swath * 1000,\n });\n this.createCesiumSatelliteEntity(\"Ground track\", \"corridor\", corridor);\n }\n\n createCone(fov = 10) {\n if (this.props.orbit.orbitalPeriod > 60 * 2) {\n // Cone graphic unavailable for non-LEO satellites\n return;\n }\n const entity = new Cesium.Entity();\n entity.addProperty(\"conicSensor\");\n entity.conicSensor = new CesiumSensorVolumes.ConicSensorGraphics({\n radius: 1000000,\n innerHalfAngle: Cesium.Math.toRadians(0),\n outerHalfAngle: Cesium.Math.toRadians(fov),\n lateralSurfaceMaterial: Cesium.Color.GOLD.withAlpha(0.15),\n intersectionColor: Cesium.Color.GOLD.withAlpha(0.3),\n intersectionWidth: 1,\n });\n this.components[\"Sensor cone\"] = entity;\n }\n\n createGroundStationLink() {\n if (!this.props.groundStationAvailable) {\n return;\n }\n const polyline = new Cesium.PolylineGraphics({\n followSurface: false,\n material: new Cesium.PolylineGlowMaterialProperty({\n glowPower: 0.5,\n color: Cesium.Color.FORESTGREEN,\n }),\n positions: new Cesium.CallbackProperty((time) => {\n const satPosition = this.props.position(time);\n const groundPosition = this.props.groundStationPosition.cartesian;\n const positions = [satPosition, groundPosition];\n return positions;\n }, false),\n show: new Cesium.CallbackProperty((time) => this.props.passIntervals.contains(time), false),\n width: 5,\n });\n this.createCesiumSatelliteEntity(\"Ground station link\", \"polyline\", polyline);\n }\n\n set groundStations(groundStations) {\n // No groundstation calculation for GEO satellites\n if (this.props.orbit.orbitalPeriod > 60 * 12) {\n return;\n }\n\n this.props.groundStations = groundStations;\n this.props.clearPasses();\n if (this.isSelected || this.isTracked) {\n this.props.updatePasses(this.viewer.clock.currentTime);\n if (this.isSelected) {\n CesiumTimelineHelper.updateHighlightRanges(this.viewer, this.props.passes);\n }\n }\n if (this.created) {\n this.createGroundStationLink();\n }\n }\n}\n","import * as Cesium from \"@cesium/engine\";\nimport dayjs from \"dayjs\";\nimport { CesiumComponentCollection } from \"./util/CesiumComponentCollection\";\nimport { DescriptionHelper } from \"./util/DescriptionHelper\";\n\nimport icon from \"../images/icons/dish.svg\";\n\nexport class GroundStationEntity extends CesiumComponentCollection {\n constructor(viewer, sats, position, givenName = \"\") {\n super(viewer);\n this.sats = sats;\n this.position = position;\n this.givenName = givenName;\n\n this.createEntities();\n }\n\n createEntities() {\n this.createDescription();\n this.createGroundStation();\n }\n\n createGroundStation() {\n const billboard = new Cesium.BillboardGraphics({\n image: icon,\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n scaleByDistance: new Cesium.NearFarScalar(1e2, 0.2, 4e7, 0.1),\n });\n this.createCesiumEntity(\"Groundstation\", \"billboard\", billboard, this.name, this.description, this.position.cartesian, false);\n }\n\n createDescription() {\n this.description = DescriptionHelper.cachedCallbackProperty((time) => {\n const passes = this.passes(time);\n const content = DescriptionHelper.renderGroundstationDescription(time, this.name, this.position, passes);\n return content;\n });\n }\n\n get hasName() {\n return this.givenName !== \"\";\n }\n\n get name() {\n if (this.givenName) {\n return this.givenName;\n }\n return `${this.position.latitude.toFixed(2)}°, ${this.position.longitude.toFixed(2)}°`;\n }\n\n passes(time, deltaHours = 48) {\n let passes = [];\n // Aggregate passes from all visible satellites\n this.sats.visibleSatellites.forEach((sat) => {\n sat.props.updatePasses(this.viewer.clock.currentTime);\n passes.push(...sat.props.passes);\n });\n\n // Filter passes based on time\n passes = passes.filter((pass) => dayjs(pass.start).diff(time, \"hours\") < deltaHours);\n\n // Filter passes based on groundstation\n passes = passes.filter((pass) => pass.groundStationName === this.name);\n\n // Sort passes by time\n passes = passes.sort((a, b) => a.start - b.start);\n return passes;\n }\n}\n","import { CesiumCallbackHelper } from \"./CesiumCallbackHelper\";\n\nexport class CesiumCleanupHelper {\n // Cleanup leftover Cesium internal data after removing satellites\n // https://github.com/CesiumGS/cesium/issues/7184\n static cleanup(viewer) {\n const onTickEventRemovalCallback = CesiumCallbackHelper.createPeriodicTickCallback(viewer, 1, () => {\n console.info(\"Removing leftover Cesium internal data\");\n onTickEventRemovalCallback();\n /* eslint-disable no-underscore-dangle */\n const labelCollection = viewer.scene.primitives?._primitives[0]?._primitives[0]._primitives[0]._labelCollection;\n if (labelCollection) {\n labelCollection._spareBillboards.forEach((billboard) => {\n labelCollection._billboardCollection.remove(billboard);\n });\n labelCollection._spareBillboards.length = 0;\n }\n /* eslint-enable no-underscore-dangle */\n });\n }\n}\n","import { SatelliteComponentCollection } from \"./SatelliteComponentCollection\";\nimport { GroundStationEntity } from \"./GroundStationEntity\";\n\nimport { useSatStore } from \"../stores/sat\";\nimport { CesiumCleanupHelper } from \"./util/CesiumCleanupHelper\";\n\nexport class SatelliteManager {\n #enabledComponents = [\"Point\", \"Label\"];\n\n #enabledTags = [];\n\n #enabledSatellites = [];\n\n #groundStations = [];\n\n constructor(viewer) {\n this.viewer = viewer;\n\n this.satellites = [];\n this.availableComponents = [\"Point\", \"Label\", \"Orbit\", \"Orbit track\", \"Ground track\", \"Sensor cone\", \"3D model\"];\n\n this.viewer.trackedEntityChanged.addEventListener(() => {\n if (this.trackedSatellite) {\n this.getSatellite(this.trackedSatellite).show(this.#enabledComponents);\n }\n useSatStore().trackedSatellite = this.trackedSatellite;\n });\n }\n\n addFromTleUrls(urlTagList) {\n // Initiate async download of all TLE URLs and update store afterwards\n const promises = urlTagList.map(([url, tags]) => this.addFromTleUrl(url, tags, false));\n Promise.all(promises).then(() => this.updateStore());\n }\n\n addFromTleUrl(url, tags, updateStore = true) {\n return fetch(url, {\n mode: \"no-cors\",\n }).then((response) => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n }).then((response) => response.text())\n .then((data) => {\n const lines = data.split(/\\r?\\n/);\n for (let i = 3; i < lines.length; i + 3) {\n const tle = lines.splice(i - 3, i).join(\"\\n\");\n this.addFromTle(tle, tags, updateStore);\n }\n })\n .catch((error) => {\n console.log(error);\n });\n }\n\n addFromTle(tle, tags, updateStore = true) {\n const sat = new SatelliteComponentCollection(this.viewer, tle, tags);\n this.#add(sat);\n if (updateStore) {\n this.updateStore();\n }\n }\n\n #add(newSat) {\n const existingSat = this.satellites.find((sat) => sat.props.satnum === newSat.props.satnum && sat.props.name === newSat.props.name);\n if (existingSat) {\n existingSat.props.addTags(newSat.props.tags);\n if (newSat.props.tags.some((tag) => this.#enabledTags.includes(tag))) {\n existingSat.show(this.#enabledComponents);\n }\n return;\n }\n if (this.groundStationAvailable) {\n newSat.groundStations = this.#groundStations;\n }\n this.satellites.push(newSat);\n\n if (this.satIsActive(newSat)) {\n newSat.show(this.#enabledComponents);\n if (this.pendingTrackedSatellite === newSat.props.name) {\n this.trackedSatellite = newSat.props.name;\n }\n }\n }\n\n updateStore() {\n const satStore = useSatStore();\n satStore.availableTags = this.tags;\n satStore.availableSatellitesByTag = this.taglist;\n }\n\n get taglist() {\n const taglist = {};\n this.satellites.forEach((sat) => {\n sat.props.tags.forEach((tag) => {\n (taglist[tag] = taglist[tag] || []).push(sat.props.name);\n });\n });\n Object.values(taglist).forEach((tag) => {\n tag.sort();\n });\n return taglist;\n }\n\n get selectedSatellite() {\n const satellite = this.satellites.find((sat) => sat.isSelected);\n return satellite ? satellite.props.name : \"\";\n }\n\n get trackedSatellite() {\n const satellite = this.satellites.find((sat) => sat.isTracked);\n return satellite ? satellite.props.name : \"\";\n }\n\n set trackedSatellite(name) {\n if (!name) {\n if (this.trackedSatellite) {\n this.viewer.trackedEntity = undefined;\n }\n return;\n }\n if (name === this.trackedSatellite) {\n return;\n }\n\n const sat = this.getSatellite(name);\n if (sat) {\n sat.track();\n this.pendingTrackedSatellite = undefined;\n } else {\n // Satellite does not exist (yet?)\n this.pendingTrackedSatellite = name;\n }\n }\n\n get visibleSatellites() {\n return this.satellites.filter((sat) => sat.created);\n }\n\n get satelliteNames() {\n return this.satellites.map((sat) => sat.props.name);\n }\n\n getSatellite(name) {\n return this.satellites.find((sat) => sat.props.name === name);\n }\n\n get enabledSatellites() {\n return this.#enabledSatellites;\n }\n\n set enabledSatellites(newSats) {\n this.#enabledSatellites = newSats;\n this.showEnabledSatellites();\n\n const satStore = useSatStore();\n satStore.enabledSatellites = newSats;\n }\n\n get tags() {\n const tags = this.satellites.map((sat) => sat.props.tags);\n return [...new Set([].concat(...tags))];\n }\n\n getSatellitesWithTag(tag) {\n return this.satellites.filter((sat) => sat.props.hasTag(tag));\n }\n\n /**\n * Returns true if the satellite is enabled by tag or name\n * @param {SatelliteComponentCollection} sat\n * @returns {boolean} true if the satellite is enabled\n */\n satIsActive(sat) {\n const enabledByTag = this.#enabledTags.some((tag) => sat.props.hasTag(tag));\n const enabledByName = this.#enabledSatellites.includes(sat.props.name);\n return enabledByTag || enabledByName;\n }\n\n get activeSatellites() {\n return this.satellites.filter((sat) => this.satIsActive(sat));\n }\n\n showEnabledSatellites() {\n this.satellites.forEach((sat) => {\n if (this.satIsActive(sat)) {\n sat.show(this.#enabledComponents);\n } else {\n sat.hide();\n }\n });\n if (this.visibleSatellites.length === 0) {\n CesiumCleanupHelper.cleanup(this.viewer);\n }\n }\n\n get enabledTags() {\n return this.#enabledTags;\n }\n\n set enabledTags(newTags) {\n this.#enabledTags = newTags;\n this.showEnabledSatellites();\n\n const satStore = useSatStore();\n satStore.enabledTags = newTags;\n }\n\n get components() {\n const components = this.satellites.map((sat) => sat.components);\n return [...new Set([].concat(...components))];\n }\n\n get enabledComponents() {\n return this.#enabledComponents;\n }\n\n set enabledComponents(newComponents) {\n const oldComponents = this.#enabledComponents;\n const add = newComponents.filter((x) => !oldComponents.includes(x));\n const del = oldComponents.filter((x) => !newComponents.includes(x));\n add.forEach((component) => {\n this.enableComponent(component);\n });\n del.forEach((component) => {\n this.disableComponent(component);\n });\n }\n\n enableComponent(componentName) {\n if (!this.#enabledComponents.includes(componentName)) {\n this.#enabledComponents.push(componentName);\n }\n\n this.activeSatellites.forEach((sat) => {\n sat.enableComponent(componentName);\n });\n }\n\n disableComponent(componentName) {\n this.#enabledComponents = this.#enabledComponents.filter((name) => name !== componentName);\n\n this.activeSatellites.forEach((sat) => {\n sat.disableComponent(componentName);\n });\n }\n\n get groundStationAvailable() {\n return this.#groundStations.length > 0;\n }\n\n focusGroundStation() {\n if (this.groundStationAvailable) {\n this.#groundStations[0].track();\n }\n }\n\n createGroundstation(position, name) {\n const groundStation = new GroundStationEntity(this.viewer, this, position, name);\n groundStation.show();\n return groundStation;\n }\n\n addGroundStation(position, name) {\n if (position.height < 1) {\n position.height = 0;\n }\n const groundStation = this.createGroundstation(position, name);\n this.groundStations = [...this.#groundStations, groundStation];\n }\n\n get groundStations() {\n return this.#groundStations;\n }\n\n set groundStations(newGroundStations) {\n this.#groundStations = newGroundStations;\n\n // Set groundstation for all satellites\n this.satellites.forEach((sat) => {\n sat.groundStations = this.#groundStations;\n });\n\n // Update store for url state\n const satStore = useSatStore();\n // TODO Store all groundsations in url param with name\n satStore.groundStations = this.#groundStations.map((gs) => ({\n lat: gs.position.latitude,\n lon: gs.position.longitude,\n name: gs.hasName ? gs.name : undefined,\n }));\n }\n}\n","import * as Cesium from \"@cesium/engine\";\nimport { Viewer } from \"@cesium/widgets\";\nimport dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\nimport * as Sentry from \"@sentry/browser\";\nimport { icon } from \"@fortawesome/fontawesome-svg-core\";\nimport { faBell, faInfo } from \"@fortawesome/free-solid-svg-icons\";\nimport { useToast } from \"vue-toastification\";\nimport satvisIcon from \"../assets/android-chrome-192x192.png\";\n\nimport { DeviceDetect } from \"./util/DeviceDetect\";\nimport { PushManager } from \"./util/PushManager\";\nimport { CesiumPerformanceStats } from \"./util/CesiumPerformanceStats\";\nimport { SatelliteManager } from \"./SatelliteManager\";\nimport { useCesiumStore } from \"../stores/cesium\";\nimport infoBoxCss from \"../css/infobox.ecss\";\n\ndayjs.extend(utc);\n\nexport class CesiumController {\n constructor() {\n this.initConstants();\n this.preloadReferenceFrameData();\n this.minimalUI = DeviceDetect.inIframe() || DeviceDetect.isIos();\n\n this.viewer = new Viewer(\"cesiumContainer\", {\n animation: !this.minimalUI,\n baseLayer: this.createImageryLayer(\"OfflineHighres\"),\n baseLayerPicker: false,\n fullscreenButton: !this.minimalUI,\n fullscreenElement: document.body,\n geocoder: false,\n homeButton: false,\n navigationHelpButton: false,\n navigationInstructionsInitiallyVisible: false,\n sceneModePicker: false,\n selectionIndicator: false,\n timeline: !this.minimalUI,\n vrButton: !this.minimalUI,\n contextOptions: {\n webgl: {\n alpha: true,\n },\n },\n });\n\n // Cesium default settings\n this.viewer.clock.shouldAnimate = true;\n this.viewer.scene.globe.enableLighting = true;\n this.viewer.scene.highDynamicRange = true;\n this.viewer.scene.maximumRenderTimeChange = 1 / 30;\n this.viewer.scene.requestRenderMode = true;\n\n // Cesium Performance Tools\n // this.viewer.scene.debugShowFramesPerSecond = true;\n // this.FrameRateMonitor = Cesium.FrameRateMonitor.fromScene(this.viewer.scene);\n // this.viewer.scene.postRender.addEventListener((scene) => {\n // console.log(this.FrameRateMonitor.lastFramesPerSecond)\n // });\n // this.performanceStats = new CesiumPerformanceStats(this.viewer.scene, true);\n\n // Export CesiumController for debugger\n window.cc = this;\n\n // CesiumController config\n this.sceneModes = [\"3D\", \"2D\", \"Columbus\"];\n this.cameraModes = [\"Fixed\", \"Inertial\"];\n\n this.createInputHandler();\n this.addErrorHandler();\n this.styleInfoBox();\n\n // Create Satellite Manager\n this.sats = new SatelliteManager(this.viewer);\n\n this.pm = new PushManager({\n icon: satvisIcon,\n });\n\n // Add privacy policy to credits when not running in iframe\n if (!DeviceDetect.inIframe()) {\n this.viewer.creditDisplay.addStaticCredit(new Cesium.Credit(`
Privacy`, true));\n }\n this.viewer.creditDisplay.addStaticCredit(new Cesium.Credit(`Satellite TLE data provided by Celestrak`));\n\n // Fix Cesium logo in minimal ui mode\n if (this.minimalUI) {\n setTimeout(() => { this.fixLogo(); }, 2500);\n }\n\n this.activeLayers = [];\n }\n\n initConstants() {\n this.imageryProviders = {\n Offline: {\n create: () => Cesium.TileMapServiceImageryProvider.fromUrl(Cesium.buildModuleUrl(\"Assets/Textures/NaturalEarthII\")),\n alpha: 1,\n base: true,\n },\n OfflineHighres: {\n create: () => Cesium.TileMapServiceImageryProvider.fromUrl(\"data/cesium-assets/imagery/NaturalEarthII\", {\n maximumLevel: 5,\n credit: \"Imagery courtesy Natural Earth\",\n }),\n alpha: 1,\n base: true,\n },\n ArcGis: {\n create: () => Cesium.ArcGisMapServerImageryProvider.fromUrl(\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\", {\n enablePickFeatures: false,\n }),\n alpha: 1,\n base: true,\n },\n OSM: {\n create: () => new Cesium.OpenStreetMapImageryProvider({\n url: \"https://a.tile.openstreetmap.org/\",\n }),\n alpha: 1,\n base: true,\n },\n Topo: {\n create: () => new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.maptiler.com/maps/topo-v2/{z}/{x}/{y}@2x.png?key=tiHE8Ed08u6ZoFjbE32Z\",\n credit: `© MapTiler © OpenStreetMap contributors`,\n }),\n alpha: 1,\n base: true,\n },\n BlackMarble: {\n create: () => new Cesium.WebMapServiceImageryProvider({\n url: \"https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi\",\n layers: \"VIIRS_Black_Marble\",\n style: \"default\",\n tileMatrixSetID: \"250m\",\n format: \"image/png\",\n tileWidth: 512,\n tileHeight: 512,\n credit: \"NASA Global Imagery Browse Services for EOSDIS\",\n }),\n alpha: 1,\n base: true,\n },\n Tiles: {\n create: () => new Cesium.TileCoordinatesImageryProvider(),\n alpha: 1,\n base: false,\n },\n \"GOES-IR\": {\n create: () => new Cesium.WebMapServiceImageryProvider({\n url: \"https://mesonet.agron.iastate.edu/cgi-bin/wms/goes/conus_ir.cgi?\",\n layers: \"goes_conus_ir\",\n credit: \"Infrared data courtesy Iowa Environmental Mesonet\",\n parameters: {\n transparent: \"true\",\n format: \"image/png\",\n },\n }),\n alpha: 0.5,\n base: false,\n },\n Nextrad: {\n create: () => new Cesium.WebMapServiceImageryProvider({\n url: \"https://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?\",\n layers: \"nexrad-n0r\",\n credit: \"US Radar data courtesy Iowa Environmental Mesonet\",\n parameters: {\n transparent: \"true\",\n format: \"image/png\",\n },\n }),\n alpha: 0.5,\n base: false,\n },\n };\n this.terrainProviders = {\n None: {\n create: () => new Cesium.EllipsoidTerrainProvider(),\n },\n Maptiler: {\n create: () => Cesium.CesiumTerrainProvider.fromUrl(\"https://api.maptiler.com/tiles/terrain-quantized-mesh/?key=tiHE8Ed08u6ZoFjbE32Z\", {\n credit: \"© MapTiler © OpenStreetMap contributors\",\n requestVertexNormals: true,\n }),\n },\n ArcGIS: {\n create: () => Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(\"https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer\"),\n visible: false,\n },\n };\n }\n\n preloadReferenceFrameData() {\n // Preload reference frame data for a timeframe of 180 days\n const timeInterval = new Cesium.TimeInterval({\n start: Cesium.JulianDate.addDays(Cesium.JulianDate.now(), -60, new Cesium.JulianDate()),\n stop: Cesium.JulianDate.addDays(Cesium.JulianDate.now(), 120, new Cesium.JulianDate()),\n });\n Cesium.Transforms.preloadIcrfFixed(timeInterval).then(() => {\n console.log(\"Reference frame data loaded\");\n });\n }\n\n get imageryProviderNames() {\n return Object.keys(this.imageryProviders);\n }\n\n get baseLayers() {\n return Object.entries(this.imageryProviders).filter(([, val]) => val.base).map(([key]) => key);\n }\n\n get overlayLayers() {\n return Object.entries(this.imageryProviders).filter(([, val]) => !val.base).map(([key]) => key);\n }\n\n set imageryLayers(newLayerNames) {\n this.clearImageryLayers();\n newLayerNames.forEach((layerName) => {\n const [name, alpha] = layerName.split(\"_\");\n const layer = this.createImageryLayer(name, alpha);\n if (layer) {\n this.viewer.scene.imageryLayers.add(layer);\n }\n });\n }\n\n clearImageryLayers() {\n this.viewer.scene.imageryLayers.removeAll();\n }\n\n createImageryLayer(imageryProviderName, alpha) {\n if (!this.imageryProviderNames.includes(imageryProviderName)) {\n console.error(\"Unknown imagery layer\");\n return false;\n }\n\n const provider = this.imageryProviders[imageryProviderName];\n const layer = Cesium.ImageryLayer.fromProviderAsync(provider.create());\n if (alpha === undefined) {\n layer.alpha = provider.alpha;\n } else {\n layer.alpha = alpha;\n }\n return layer;\n }\n\n get terrainProviderNames() {\n return Object.entries(this.terrainProviders).filter(([, val]) => val.visible ?? true).map(([key]) => key);\n }\n\n set terrainProvider(terrainProviderName) {\n this.updateTerrainProvider(terrainProviderName);\n }\n\n async updateTerrainProvider(terrainProviderName) {\n if (!this.terrainProviderNames.includes(terrainProviderName)) {\n console.error(\"Unknown terrain provider\");\n return;\n }\n\n const provider = await this.terrainProviders[terrainProviderName].create();\n this.viewer.terrainProvider = provider;\n }\n\n set sceneMode(sceneMode) {\n if (sceneMode === \"3D\") {\n this.viewer.scene.morphTo3D();\n return;\n }\n if (this.sats.enabledComponents.includes(\"Orbit\")) {\n useToast().warning(\"Disable the Orbit satellite element for 2D mode\");\n return;\n }\n if (sceneMode === \"2D\") {\n this.viewer.scene.morphTo2D();\n return;\n }\n if (sceneMode === \"Columbus\") {\n this.viewer.scene.morphToColumbusView();\n }\n }\n\n jumpTo(location) {\n switch (location) {\n case \"Everest\": {\n const target = new Cesium.Cartesian3(300770.50872389384, 5634912.131394585, 2978152.2865545116);\n const offset = new Cesium.Cartesian3(6344.974098678562, -793.3419798081741, 2499.9508860763162);\n this.viewer.camera.lookAt(target, offset);\n this.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n break;\n }\n case \"HalfDome\": {\n const target = new Cesium.Cartesian3(-2489625.0836225147, -4393941.44443024, 3882535.9454173897);\n const offset = new Cesium.Cartesian3(-6857.40902037546, 412.3284835694358, 2147.5545426812023);\n this.viewer.camera.lookAt(target, offset);\n this.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n break;\n }\n default:\n console.error(\"Unknown location\");\n }\n }\n\n set cameraMode(cameraMode) {\n switch (cameraMode) {\n case \"Inertial\":\n this.viewer.scene.postUpdate.addEventListener(this.cameraTrackEci);\n break;\n case \"Fixed\":\n this.viewer.scene.postUpdate.removeEventListener(this.cameraTrackEci);\n break;\n default:\n console.error(\"Unknown camera mode\");\n }\n }\n\n cameraTrackEci(scene, time) {\n if (scene.mode !== Cesium.SceneMode.SCENE3D) {\n return;\n }\n\n const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);\n if (Cesium.defined(icrfToFixed)) {\n const { camera } = scene;\n const offset = Cesium.Cartesian3.clone(camera.position);\n const transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n camera.lookAtTransform(transform, offset);\n }\n }\n\n setTime(current, start = dayjs.utc(current).subtract(12, \"hour\").toISOString(), stop = dayjs.utc(current).add(7, \"day\").toISOString()) {\n this.viewer.clock.startTime = Cesium.JulianDate.fromIso8601(dayjs.utc(start).toISOString());\n this.viewer.clock.stopTime = Cesium.JulianDate.fromIso8601(dayjs.utc(stop).toISOString());\n this.viewer.clock.currentTime = Cesium.JulianDate.fromIso8601(dayjs.utc(current).toISOString());\n if (typeof this.viewer.timeline !== \"undefined\") {\n this.viewer.timeline.updateFromClock();\n this.viewer.timeline.zoomTo(this.viewer.clock.startTime, this.viewer.clock.stopTime);\n }\n }\n\n createInputHandler() {\n const handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);\n handler.setInputAction((event) => {\n const { pickMode } = useCesiumStore();\n if (!pickMode) {\n return;\n }\n this.setGroundStationFromClickEvent(event);\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n\n setGroundStationFromClickEvent(event) {\n const cartesian = this.viewer.camera.pickEllipsoid(event.position);\n const didHitGlobe = Cesium.defined(cartesian);\n if (didHitGlobe) {\n const coordinates = {};\n const cartographicPosition = Cesium.Cartographic.fromCartesian(cartesian);\n coordinates.longitude = Cesium.Math.toDegrees(cartographicPosition.longitude);\n coordinates.latitude = Cesium.Math.toDegrees(cartographicPosition.latitude);\n coordinates.height = Cesium.Math.toDegrees(cartographicPosition.height);\n coordinates.cartesian = cartesian;\n this.sats.addGroundStation(coordinates);\n useCesiumStore().pickMode = false;\n }\n }\n\n setGroundStationFromGeolocation() {\n navigator.geolocation.getCurrentPosition((position) => {\n if (typeof position === \"undefined\") {\n return;\n }\n const coordinates = {};\n coordinates.longitude = position.coords.longitude;\n coordinates.latitude = position.coords.latitude;\n coordinates.height = position.coords.altitude;\n coordinates.cartesian = Cesium.Cartesian3.fromDegrees(coordinates.longitude, coordinates.latitude, coordinates.height);\n this.sats.addGroundStation(coordinates, \"Geolocation\");\n });\n }\n\n setGroundStationFromLatLon(lat, lon, height = 0) {\n if (!lat || !lon) {\n return;\n }\n const coordinates = {\n longitude: lon,\n latitude: lat,\n height,\n };\n coordinates.longitude = lon;\n coordinates.latitude = lat;\n coordinates.height = height;\n coordinates.cartesian = Cesium.Cartesian3.fromDegrees(coordinates.longitude, coordinates.latitude, coordinates.height);\n this.sats.addGroundStation(coordinates);\n }\n\n setGroundStations(groundStations) {\n if (!groundStations && groundStations.length === 0) {\n return;\n }\n const groundStationEntities = [];\n groundStations.forEach((gs) => {\n if (!gs.lat || !gs.lon) {\n return;\n }\n const coordinates = {\n longitude: gs.lon,\n latitude: gs.lat,\n height: 0,\n };\n coordinates.cartesian = Cesium.Cartesian3.fromDegrees(coordinates.longitude, coordinates.latitude, coordinates.height);\n groundStationEntities.push(this.sats.createGroundstation(coordinates, gs.name));\n });\n this.sats.groundStations = groundStationEntities;\n }\n\n set showUI(enabled) {\n if (enabled) {\n /* eslint-disable no-underscore-dangle */\n this.viewer._animation.container.style.visibility = \"\";\n this.viewer._timeline.container.style.visibility = \"\";\n this.viewer._fullscreenButton._container.style.visibility = \"\";\n this.viewer._vrButton._container.style.visibility = \"\";\n this.viewer._bottomContainer.style.left = this.oldBottomContainerStyleLeft;\n this.viewer._bottomContainer.style.bottom = \"30px\";\n } else {\n this.viewer._animation.container.style.visibility = \"hidden\";\n this.viewer._timeline.container.style.visibility = \"hidden\";\n this.viewer._fullscreenButton._container.style.visibility = \"hidden\";\n this.viewer._vrButton._container.style.visibility = \"hidden\";\n this.oldBottomContainerStyleLeft = this.viewer._bottomContainer.style.left;\n this.viewer._bottomContainer.style.left = \"5px\";\n this.viewer._bottomContainer.style.bottom = \"0px\";\n /* eslint-enable no-underscore-dangle */\n }\n }\n\n get showUI() {\n // eslint-disable-next-line\n return this.viewer._timeline.container.style.visibility !== \"hidden\";\n }\n\n fixLogo() {\n if (this.minimalUI) {\n // eslint-disable-next-line\n this.viewer._bottomContainer.style.left = \"5px\";\n }\n if (DeviceDetect.isiPhoneWithNotchVisible()) {\n // eslint-disable-next-line\n this.viewer._bottomContainer.style.bottom = \"20px\";\n }\n }\n\n set qualityPreset(quality) {\n switch (quality) {\n case \"low\":\n // Ignore browser's device pixel ratio and use CSS pixels instead of device pixels for render resolution\n this.viewer.useBrowserRecommendedResolution = true;\n break;\n case \"high\":\n // Use browser's device pixel ratio for render resolution\n this.viewer.useBrowserRecommendedResolution = false;\n break;\n default:\n console.error(\"Unknown quality preset\");\n }\n }\n\n set showFps(value) {\n cc.viewer.scene.debugShowFramesPerSecond = value;\n }\n\n set background(active) {\n if (!active) {\n this.viewer.scene.backgroundColor = Cesium.Color.TRANSPARENT;\n this.viewer.scene.moon = undefined;\n this.viewer.scene.skyAtmosphere = undefined;\n this.viewer.scene.skyBox = undefined;\n this.viewer.scene.sun = undefined;\n document.documentElement.style.background = \"transparent\";\n document.body.style.background = \"transparent\";\n document.getElementById(\"cesiumContainer\").style.background = \"transparent\";\n }\n }\n\n enablePerformanceStats(logContinuously = false) {\n this.performanceStats = new CesiumPerformanceStats(this.viewer.scene, logContinuously);\n }\n\n addErrorHandler() {\n // Rethrow scene render errors\n this.viewer.scene.rethrowRenderErrors = true;\n this.viewer.scene.renderError.addEventListener((scene, error) => {\n console.error(scene, error);\n Sentry.captureException(error);\n });\n\n // Proxy and log CesiumWidget render loop errors that only display a UI error message\n const widget = this.viewer.cesiumWidget;\n const proxied = widget.showErrorPanel;\n widget.showErrorPanel = function widgetError(title, message, error) {\n proxied.apply(this, [title, message, error]);\n Sentry.captureException(error);\n };\n }\n\n styleInfoBox() {\n const infoBox = this.viewer.infoBox.container.getElementsByClassName(\"cesium-infoBox\")[0];\n const close = this.viewer.infoBox.container.getElementsByClassName(\"cesium-infoBox-close\")[0];\n if (infoBox && close) {\n // Container for additional buttons\n const container = document.createElement(\"div\");\n container.setAttribute(\"class\", \"cesium-infoBox-container\");\n infoBox.insertBefore(container, close);\n\n const notifyForPass = (pass, aheadMin = 5) => {\n const start = dayjs(pass.start).startOf(\"second\");\n this.pm.notifyAtDate(start.subtract(aheadMin, \"minute\"), `${pass.name} pass in ${aheadMin} minutes`);\n this.pm.notifyAtDate(start, `${pass.name} pass starting now`);\n // this.pm.notifyAtDate(dayjs().add(5, \"second\"), `${pass.name} notification test`);\n };\n\n // Notify button\n const notifyButton = document.createElement(\"button\");\n notifyButton.setAttribute(\"type\", \"button\");\n notifyButton.setAttribute(\"class\", \"cesium-button cesium-infoBox-custom\");\n notifyButton.innerHTML = icon(faBell).html;\n notifyButton.addEventListener(\"click\", () => {\n let passes = [];\n const toast = useToast();\n if (!this.sats.groundStationAvailable) {\n toast.warning(\"Ground station required to notify for passes\");\n return;\n }\n const selectedGroundstation = this.sats.groundStations.find((gs) => gs.isSelected);\n if (this.sats.selectedSatellite) {\n passes = this.sats.getSatellite(this.sats.selectedSatellite).props.passes;\n } else if (selectedGroundstation) {\n passes = selectedGroundstation.passes(this.viewer.clock.currentTime);\n }\n if (!passes) {\n toast.info(`No passes available`);\n return;\n }\n passes.forEach((pass) => notifyForPass(pass));\n toast.success(`Notifying for ${passes.length} passes`);\n });\n container.appendChild(notifyButton);\n\n // Info button\n const infoButton = document.createElement(\"button\");\n infoButton.setAttribute(\"type\", \"button\");\n infoButton.setAttribute(\"class\", \"cesium-button cesium-infoBox-custom\");\n infoButton.innerHTML = icon(faInfo).html;\n infoButton.addEventListener(\"click\", () => {\n if (!this.sats.selectedSatellite) {\n return;\n }\n const { satnum } = this.sats.getSatellite(this.sats.selectedSatellite).props;\n const url = `https://www.n2yo.com/satellite/?s=${satnum}`;\n window.open(url, \"_blank\", \"noopener\");\n });\n container.appendChild(infoButton);\n }\n\n const { frame } = this.viewer.infoBox;\n frame.addEventListener(\"load\", () => {\n // Inline infobox css as iframe does not use service worker\n const { head } = frame.contentDocument;\n const links = head.getElementsByTagName(\"link\");\n [...links].forEach((link) => {\n head.removeChild(link);\n });\n\n const style = frame.contentDocument.createElement(\"style\");\n const css = infoBoxCss.toString();\n const node = document.createTextNode(css);\n style.appendChild(node);\n head.appendChild(style);\n }, false);\n\n // Allow js in infobox\n frame.setAttribute(\"sandbox\", \"allow-same-origin allow-popups allow-forms allow-scripts\");\n frame.setAttribute(\"allowTransparency\", \"true\");\n frame.src = \"about:blank\";\n\n // Allow time changes from infobox\n window.addEventListener(\"message\", (e) => {\n const pass = e.data;\n if (\"start\" in pass) {\n this.setTime(pass.start);\n }\n });\n }\n}\n","import { createApp, markRaw } from \"vue\";\nimport { createPinia } from \"pinia\";\nimport { Workbox } from \"workbox-window\";\nimport PrimeVue from \"primevue/config\";\nimport Aura from \"@primevue/themes/aura\";\nimport Tooltip from \"primevue/tooltip\";\nimport Toast from \"vue-toastification\";\nimport * as Sentry from \"@sentry/browser\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/vue-fontawesome\";\nimport { faLayerGroup, faGlobeAfrica, faMobileAlt, faHammer, faEye } from \"@fortawesome/free-solid-svg-icons\";\nimport { faGithub } from \"@fortawesome/free-brands-svg-icons\";\n\nimport App from \"./App.vue\";\nimport { router } from \"./router\";\nimport piniaUrlSync from \"./modules/util/pinia-plugin-url-sync\";\nimport { CesiumController } from \"./modules/CesiumController\";\n\nfunction satvisSetup(customConfig = {}) {\n // Enable sentry for production version\n if (window.location.href.includes(\"satvis.space\")) {\n Sentry.init({ dsn: \"https://6c17c8b3e731026b3e9e0df0ecfc1b83@o294643.ingest.us.sentry.io/1541793\" });\n }\n\n // Setup and init app\n const app = createApp(App);\n const cc = new CesiumController();\n app.config.globalProperties.cc = cc;\n const pinia = createPinia();\n pinia.use(({ store }) => { store.router = markRaw(router); });\n pinia.use(({ store }) => { store.customConfig = markRaw(customConfig); });\n pinia.use(piniaUrlSync);\n app.use(pinia);\n app.use(router);\n app.use(PrimeVue, {\n theme: {\n preset: Aura,\n },\n });\n app.directive(\"tooltip\", Tooltip);\n app.use(Toast, {\n position: \"bottom-right\",\n });\n library.add(faLayerGroup, faGlobeAfrica, faMobileAlt, faHammer, faEye, faGithub);\n app.component(\"FontAwesomeIcon\", FontAwesomeIcon);\n app.mount(\"#app\");\n\n // Register service worker\n if (\"serviceWorker\" in navigator && !window.location.href.includes(\"localhost\")) {\n const wb = new Workbox(\"sw.js\");\n wb.addEventListener(\"controlling\", (evt) => {\n if (evt.isUpdate) {\n console.log(\"Reloading page for latest content\");\n window.location.reload();\n }\n });\n wb.register();\n }\n\n return { app, cc };\n}\n\nexport default satvisSetup;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-4!../../node_modules/cesium/Source/Widgets/InfoBox/InfoBoxDescription.css\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.ib h3 {\n text-align: center;\n margin-block-start: 10px;\n margin-block-end: 10px;\n}\n\n.ib .ib-text {\n text-align: center;\n}\n\n.ib .ib-code {\n background: #f4f4f4;\n color: #666;\n font-size: 12px;\n line-height: 1.5;\n margin: 0px;\n padding: 4px;\n white-space: pre-wrap;\n}\n\n.ib .ib-code code {\n background: inherit;\n}\n\n.ibt {\n border-collapse: collapse;\n border-radius: 6px;\n width: 100%;\n}\n\n.ibt th, .ibt td {\n border: 1px solid #6d6d6d;\n}\n\n.ibt th {\n background-color: #4CAF50;\n padding: 6px;\n}\n\n.ibt td {\n text-align: center;\n padding: 4px;\n}\n\n.ibt td:first-child, .ibt th:first-child {\n text-align: left;\n}\n\n.ibt .ibt-right {\n text-align: right;\n}\n\n.cesium-infoBox-description {\n margin-right: 0px;\n min-height: 200px;\n max-height: 500px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n background-color: rgba(38, 38, 38, 0.95);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/css/infobox.ecss\"],\"names\":[],\"mappings\":\"AAEA;IACI,kBAAkB;IAClB,wBAAwB;IACxB,sBAAsB;AAC1B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,qBAAqB;AACzB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,yBAAyB;IACzB,kBAAkB;IAClB,WAAW;AACf;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,yBAAyB;IACzB,YAAY;AAChB;;AAEA;IACI,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,iCAAiC;IACjC,wCAAwC;AAC5C\",\"sourcesContent\":[\"@import url(\\\"../../node_modules/cesium/Source/Widgets/InfoBox/InfoBoxDescription.css\\\");\\n\\n.ib h3 {\\n text-align: center;\\n margin-block-start: 10px;\\n margin-block-end: 10px;\\n}\\n\\n.ib .ib-text {\\n text-align: center;\\n}\\n\\n.ib .ib-code {\\n background: #f4f4f4;\\n color: #666;\\n font-size: 12px;\\n line-height: 1.5;\\n margin: 0px;\\n padding: 4px;\\n white-space: pre-wrap;\\n}\\n\\n.ib .ib-code code {\\n background: inherit;\\n}\\n\\n.ibt {\\n border-collapse: collapse;\\n border-radius: 6px;\\n width: 100%;\\n}\\n\\n.ibt th, .ibt td {\\n border: 1px solid #6d6d6d;\\n}\\n\\n.ibt th {\\n background-color: #4CAF50;\\n padding: 6px;\\n}\\n\\n.ibt td {\\n text-align: center;\\n padding: 4px;\\n}\\n\\n.ibt td:first-child, .ibt th:first-child {\\n text-align: left;\\n}\\n\\n.ibt .ibt-right {\\n text-align: right;\\n}\\n\\n.cesium-infoBox-description {\\n margin-right: 0px;\\n min-height: 200px;\\n max-height: 500px;\\n overflow-y: auto;\\n -webkit-overflow-scrolling: touch;\\n background-color: rgba(38, 38, 38, 0.95);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n"],"names":["class","_createElementBlock","_hoisted_1","_createVNode","_component_router_view","id","key","href","target","rel","useCesiumStore","defineStore","state","layers","terrainProvider","sceneMode","cameraMode","qualityPreset","background","showFps","pickMode","urlsync","enabled","config","name","url","serialize","v","join","deserialize","split","filter","e","valid","every","l","includes","default","useSatStore","enabledComponents","availableSatellitesByTag","availableTags","enabledSatellites","enabledTags","groundStations","trackedSatellite","replaceAll","map","gs","lat","toFixed","lon","g","parseFloat","components","VueMultiselect","data","computed","mapWritableState","availableSatellites","satlist","Object","keys","this","tag","sats","length","satellitesEnabledByTag","getSatellitesFromTags","allEnabledSatellites","get","concat","set","some","sat","satellitesInEnabledTags","cc","watch","tags","satellite","methods","taglist","flat","_createElementVNode","_hoisted_2","_component_vue_multiselect","modelValue","_ctx","_cache","$event","options","multiple","searchable","placeholder","_hoisted_3","$options","limit","count","noResult","_withCtx","_createTextVNode","_","DeviceDetect","inIframe","window","self","top","hasTouch","matchMedia","matches","canHover","isIos","userAgent","navigator","toLowerCase","test","isSafari","isInStandaloneMode","standalone","isiPhoneWithNotch","getiPhoneModel","isiPhoneWithNotchVisible","ratio","devicePixelRatio","screen","height","width","SatelliteSelect","menu","cat","ios","dbg","showUI","handler","newLayers","oldLayers","newBaseLayers","layer","baseLayers","oldBaseLayers","imageryLayers","deep","newProvider","newMode","value","immediate","newComponents","newGroundStations","oldGroundStations","setGroundStations","mounted","$route","query","time","setTime","toggleMenu","oldState","forEach","k","toggleUI","minimalUI","type","onClick","_component_font_awesome_icon","icon","_createCommentVNode","_hoisted_4","_component_satellite_select","$data","_hoisted_5","_Fragment","_renderList","availableComponents","componentName","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","setGroundStationFromGeolocation","_hoisted_10","focusGroundStation","_hoisted_11","imageryProviderNames","_hoisted_12","terrainProviderNames","_hoisted_13","sceneModes","_hoisted_14","cameraModes","_hoisted_15","_hoisted_16","_hoisted_17","viewer","scene","useWebVR","_hoisted_18","clock","shouldAnimate","_hoisted_19","clockViewModel","multiplier","_hoisted_20","_hoisted_21","$router","go","path","force","_hoisted_22","_hoisted_23","_hoisted_24","requestRenderMode","_hoisted_25","_hoisted_26","fog","_hoisted_27","globe","enableLighting","_hoisted_28","highDynamicRange","_hoisted_29","showGroundAtmosphere","_hoisted_30","jumpTo","_hoisted_31","_hoisted_32","_hoisted_33","args","router","createRouter","history","createWebHistory","document","location","pathname","match","routes","component","Satvis","alias","defaultSerialize","String","defaultDeserialize","store","isReady","then","syncConfig","customConfig","route","currentRoute","defaults","$id","entries","val","param","console","info","TypeError","error","undefined","replace","urlToState","$subscribe","params","URLSearchParams","search","obj","separator","Array","isArray","reduce","prev","curr","resolve","delete","pushState","toString","stateToUrl","PushManager","constructor","timers","available","log","Notification","permission","requestPermission","result","active","clearTimers","timer","clearTimeout","persistentNotification","message","optionsMerged","serviceWorker","getRegistration","reg","showNotification","catch","err","notifyInMs","ms","setTimeout","notifyAtDate","date","waitMs","dayjs","diff","Math","abs","unix","content","delay","webkit","messageHandlers","iosNotify","postMessage","push","CesiumPerformanceStats","logContinuously","sampleCount","idx","postRenderTimes","discardNext","avgFps","avgFrameTime","worstFrameTime","preUpdate","addEventListener","performance","mark","postRender","getTimestamp","calculateStats","formatStats","measure","i","frametime","duration","reset","getStats","fmt","n","padStart","deg2rad","PI","rad2deg","Orbit","tle","satrec","satellitejs","satnum","julianDate","jdsatepoch","orbitalPeriod","meanMotionRad","no","positionECI","position","positionECF","positionEci","gmst","positionGeodetic","timestamp","calculateVelocity","velocity","velocityVector","positionGd","longitude","latitude","sqrt","x","y","z","computePassesElevation","groundStationPosition","startDate","toDate","endDate","add","minElevation","maxPasses","groundStation","Date","passes","pass","ongoingPass","lastElevation","positionEcf","lookAngles","elevation","maxElevation","apex","getTime","azimuthApex","azimuth","start","azimuthStart","setSeconds","getSeconds","end","azimuthEnd","setMinutes","getMinutes","deltaElevation","SampledPositionProperty","prototype","getRawValues","times","_property","_times","innerType","_innerType","values","_values","startIndex","binarySearch","JulianDate","compare","endIndex","unpack","packedLength","CesiumCallbackHelper","createPeriodicTickCallback","refreshRate","callback","event","onTick","ticks","currentTime","createPeriodicTimeCallback","lastUpdated","Cesium","secondsDifference","SatelliteProperties","trim","startsWith","substring","orbit","passInterval","passIntervals","hasTag","addTags","Set","sampledPosition","fixed","getValue","getSampledPositionsForNextOrbit","reference","loop","addSeconds","positions","createSampledPosition","updateSampledPosition","samplingRefreshRate","removeCallback","samplingInterval","request","stop","contains","interval","initSampledPosition","intersect","missingSecondsEnd","missingSecondsStart","samplingStart","samplingStop","addSamples","removeBefore","fromIso8601","isStartIncluded","isStopIncluded","removeAfter","removeSamples","inertial","backwardExtrapolationType","HOLD","forwardExtrapolationType","setInterpolationOptions","interpolationDegree","interpolationAlgorithm","INERTIAL","positionsFixed","positionsInertial","positionFixed","positionInertial","computePosition","computePositionInertialTEME","eci","ZERO","positionInertialTEME","temeToFixed","computeTemeToPseudoFixedMatrix","multiplyByVector","fixedToIcrf","computeFixedToIcrfMatrix","groundTrack","samplesFwd","samplesBwd","stopTime","groundStationAvailable","updatePasses","addDays","clone","stopPrediction","allPasses","groundStationName","sort","a","b","computePassIntervals","clearPasses","passIntervalArray","startJulian","fromDate","endJulian","swath","CesiumComponentCollection","static","lazy","componentNames","created","show","enableComponent","hide","disableComponent","entities","primitives","geometries","recreateGeometryInstancePrimitive","defaultEntity","remove","geometry","primitivePendingUpdate","primitivePendingCreation","primitive","requestRender","geometryInstances","appearance","lastState","readyCallback","ready","_state","update","frameState","icrfToFixed","computeIcrfToFixedMatrix","modelMatrix","fromRotationTranslation","visibleComponents","isSelected","entity","selectedEntity","isTracked","trackedEntity","track","animate","clockRunning","flyTo","offset","PI_OVER_FOUR","setSelectedOnTickCallback","onTickCallback","onUnselectCallback","onTickEventRemovalCallback","onSelectedEntityChangedRemovalCallback","selectedEntityChanged","setTrackedOnTickCallback","onUntrackCallback","onTrackedEntityChangedRemovalCallback","trackedEntityChanged","artificiallyTrack","cameraTracker","ellipsoid","toRadians","createCesiumEntity","entityKey","entityValue","description","moving","viewFrom","orientation","CesiumTimelineHelper","clearHighlightRanges","timeline","_highlightRanges","updateFromClock","zoomTo","startTime","addHighlightRanges","ranges","range","addHighlightRange","BLUE","setRange","updateHighlightRanges","relativeTime","utc","DescriptionHelper","cachedCallbackProperty","updateTreshold","usageTreshold","cache","equalsEpsilon","usage","renderSatelliteDescription","props","renderPasses","renderTLE","renderGroundstationDescription","isGroundStation","upcomingPassIdx","findIndex","isAfter","upcomingPasses","slice","passNameField","renderPass","pad2","num","countdown","JSON","stringify","format","julianDayNumber","floor","secondsOfDay","tleDate","SatelliteComponentCollection","super","eventListeners","init","createComponent","updatedSampledPositionForComponents","Label","label","pixelOffset","orbitPrimitiveUpdater","geometryPrimitiveUpdater","deinit","createDescription","isCorrectOrbitComponent","hpr","headingPitchRollQuaternion","createPoint","createLabel","createOrbit","createOrbitTrack","createGroundTrack","createCone","createModel","createGroundStationLink","cartographic","createCesiumSatelliteEntity","entityName","point","pixelSize","color","WHITE","outlineColor","DIMGREY","outlineWidth","createBox","size","box","dimensions","material","model","uri","minimumPixelSize","maximumScale","text","font","style","FILL_AND_OUTLINE","horizontalOrigin","LEFT","distanceDisplayCondition","translucencyByDistance","usePathGraphicForOrbit","createOrbitPath","createOrbitPolylineGeometry","sceneModeSupportsPrimitive","mode","SCENE3D","leadTime","trailTime","withAlpha","resolution","createOrbitPolylinePrimitive","arcType","NONE","vertexFormat","VERTEX_FORMAT","attributes","fromColor","asynchronous","geometryInstance","GOLD","corridor","cornerType","MITERED","heightReference","CLAMP_TO_GROUND","DARKRED","fov","addProperty","conicSensor","CesiumSensorVolumes","ConicSensorGraphics","radius","innerHalfAngle","outerHalfAngle","lateralSurfaceMaterial","intersectionColor","intersectionWidth","polyline","followSurface","glowPower","FORESTGREEN","cartesian","GroundStationEntity","givenName","createEntities","createGroundStation","billboard","image","CENTER","verticalOrigin","BOTTOM","scaleByDistance","hasName","deltaHours","visibleSatellites","CesiumCleanupHelper","cleanup","labelCollection","_primitives","_labelCollection","_spareBillboards","_billboardCollection","SatelliteManager","satellites","getSatellite","addFromTleUrls","urlTagList","promises","addFromTleUrl","Promise","all","updateStore","fetch","response","ok","Error","statusText","lines","splice","addFromTle","newSat","existingSat","find","satIsActive","pendingTrackedSatellite","satStore","selectedSatellite","satelliteNames","newSats","showEnabledSatellites","getSatellitesWithTag","enabledByTag","enabledByName","activeSatellites","newTags","oldComponents","del","createGroundstation","addGroundStation","CesiumController","initConstants","preloadReferenceFrameData","Viewer","animation","baseLayer","createImageryLayer","baseLayerPicker","fullscreenButton","fullscreenElement","body","geocoder","homeButton","navigationHelpButton","navigationInstructionsInitiallyVisible","sceneModePicker","selectionIndicator","vrButton","contextOptions","webgl","alpha","maximumRenderTimeChange","createInputHandler","addErrorHandler","styleInfoBox","pm","satvisIcon","creditDisplay","addStaticCredit","fixLogo","activeLayers","imageryProviders","Offline","create","fromUrl","base","OfflineHighres","maximumLevel","credit","ArcGis","enablePickFeatures","OSM","Topo","BlackMarble","tileMatrixSetID","tileWidth","tileHeight","Tiles","parameters","transparent","Nextrad","terrainProviders","None","Maptiler","requestVertexNormals","ArcGIS","visible","timeInterval","now","preloadIcrfFixed","overlayLayers","newLayerNames","clearImageryLayers","layerName","removeAll","imageryProviderName","provider","fromProviderAsync","terrainProviderName","updateTerrainProvider","useToast","warning","morphToColumbusView","morphTo2D","morphTo3D","camera","lookAt","lookAtTransform","IDENTITY","postUpdate","cameraTrackEci","removeEventListener","transform","current","subtract","toISOString","canvas","setInputAction","setGroundStationFromClickEvent","LEFT_CLICK","pickEllipsoid","coordinates","cartographicPosition","fromCartesian","toDegrees","geolocation","getCurrentPosition","coords","altitude","fromDegrees","setGroundStationFromLatLon","groundStationEntities","_animation","container","visibility","_timeline","_fullscreenButton","_container","_vrButton","_bottomContainer","left","oldBottomContainerStyleLeft","bottom","quality","useBrowserRecommendedResolution","debugShowFramesPerSecond","backgroundColor","TRANSPARENT","moon","skyAtmosphere","skyBox","sun","documentElement","getElementById","enablePerformanceStats","performanceStats","rethrowRenderErrors","renderError","Sentry","widget","cesiumWidget","proxied","showErrorPanel","title","apply","infoBox","getElementsByClassName","close","createElement","setAttribute","insertBefore","notifyForPass","aheadMin","startOf","notifyButton","innerHTML","faBell","html","toast","selectedGroundstation","success","appendChild","infoButton","faInfo","open","frame","head","contentDocument","getElementsByTagName","link","removeChild","css","infoBoxCss","node","createTextNode","src","dsn","app","createApp","App","globalProperties","pinia","createPinia","use","markRaw","piniaUrlSync","PrimeVue","theme","preset","Aura","directive","Tooltip","Toast","library","faLayerGroup","faGlobeAfrica","faMobileAlt","faHammer","faEye","faGithub","FontAwesomeIcon","mount","wb","Workbox","evt","isUpdate","reload","register","___CSS_LOADER_API_SOURCEMAP_IMPORT___","___CSS_LOADER_API_IMPORT___","___CSS_LOADER_AT_RULE_IMPORT_0___","___CSS_LOADER_EXPORT___","module","exports"],"sourceRoot":""}