import * as Cesium from 'cesium'; import { VIEWER_OPTIONS } from './00.cesium-init.VIEWER_OPTIONS'; import 'cesium/Build/Cesium/Widgets/widgets.css'; Cesium.Ion.defaultAccessToken = import.meta.env.VITE_CESIUM_ION_TOKEN; // 用了离线地图的情况是不需要的。 Object.assign(globalThis, { Cesium }); _configureCesium(); export function cesium_init(container: Element) { const viewer = new Cesium.Viewer(container, VIEWER_OPTIONS()); viewer.scene.debugShowFramesPerSecond = true; initTimeLine(viewer); return viewer; } function _configureCesium() { if (document.querySelector('#hide-cesium-viewer-bottom') === null) { document.head.append( Object.assign(document.createElement('style'), { id: 'hide-cesium-viewer-bottom', innerHTML: ` .cesium-viewer-bottom { display: none !important; } `.trim(), type: 'text/css', }), ); } /* 时间日期格式化 */ { const minutes = 0 - new Date().getTimezoneOffset(); // 0 - (-480); // Animation 的时间日期格式化 Cesium.AnimationViewModel.defaultDateFormatter = function (date) { const dataZone8 = Cesium.JulianDate.addMinutes(date, minutes, new Cesium.JulianDate()); return Cesium.JulianDate.toIso8601(dataZone8).slice(0, 10); }; Cesium.AnimationViewModel.defaultTimeFormatter = function (time) { const dataZone8 = Cesium.JulianDate.addMinutes(time, minutes, new Cesium.JulianDate()); return Cesium.JulianDate.toIso8601(dataZone8).slice(11, 19); }; // Timeline 的时间日期格式化 // @ts-expect-error node_modules/@cesium/widgets/Source/Timeline/Timeline.js Cesium.Timeline.prototype.makeLabel = function (time) { const dataZone8 = Cesium.JulianDate.addMinutes(time, minutes, new Cesium.JulianDate()); return Cesium.JulianDate.toIso8601(dataZone8).slice(0, 19); }; } // 默认视图区域 Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees( 75, // 西经 10, // 南纬 140, // 东经 60, // 北纬 ); } function initTimeLine(viewer: Cesium.Viewer, totalSeconds = /* 默认场景的时间跨度 */ 24 * 60 * 60) { const start = Cesium.JulianDate.fromIso8601(new Date().toISOString()); const stop = Cesium.JulianDate.addSeconds(start, totalSeconds, new Cesium.JulianDate()); viewer.clock.startTime = start.clone(); viewer.clock.stopTime = stop.clone(); viewer.clock.currentTime = start.clone(); viewer.timeline.zoomTo(start, stop); viewer.clock.multiplier = 1; viewer.clock.shouldAnimate = true; viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; }