import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 // 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并) export const mapOptions = { scene: { center: { lat: 53.285266, lng: 142.68078, alt: 17309707, heading: 45, pitch: -83 }, mapMode2D: Cesium.MapMode2D.ROTATE, // 二三维场景切换黑影 clock: { currentTime: "2021-01-01T12:08:20Z", multiplier: 60 // 速度 }, cameraController: { maximumZoomDistance: 9000000000, constrainedAxis: false // 解除在南北极区域鼠标操作限制 } }, control: { clockAnimate: true, // 时钟动画控制(左下角) timeline: true, // 是否显示时间线控件, compass: { top: "10px", left: "5px" } } } /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @param {mars3d.Map} mapInstance 地图对象 * @returns {void} 无 */ export function onMounted(mapInstance) { map = mapInstance // 记录map map.toolbar.style.bottom = "55px" // 修改toolbar控件的样式 // 创建矢量数据图层 const graphicLayer = new mars3d.layer.GraphicLayer() map.addLayer(graphicLayer) const property = getDynamicProperty() // 取数据 // 视锥体 展示 const conicSensor = new mars3d.graphic.ConicSensor({ position: property, style: { angle: 15, length: 2500000, color: "rgba(255,0,0,0.4)", outlineColor: "rgba(255,255,255,0.9)" } }) graphicLayer.addGraphic(conicSensor) } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } function getDynamicProperty() { // 该数据是由后端计算返回的轨道信息 const wxkjx = [ { time: "2021-01-01T12:08:20Z", x: -143.774623333805, y: 27.7998266828718, z: 1118477.29262629 }, { time: "2021-01-01T12:11:40Z", x: -146.56364947549, y: 38.8612791867078, z: 1121731.48352323 }, { time: "2021-01-01T12:15:00Z", x: -150.074587947037, y: 49.8538696199919, z: 1125266.75027392 }, { time: "2021-01-01T12:18:20Z", x: -155.164247872234, y: 60.7243205344318, z: 1128555.88185048 }, { time: "2021-01-01T12:21:40Z", x: -164.565295557077, y: 71.3021698947674, z: 1131111.78312013 }, { time: "2021-01-01T12:25:00Z", x: 168.08311253827, y: 80.6216347342535, z: 1132558.81749868 } ] const property = new Cesium.SampledPositionProperty() property.forwardExtrapolationType = Cesium.ExtrapolationType.HOLD for (let z = 0; z < wxkjx.length; z++) { const item = wxkjx[z] const thisTime = Cesium.JulianDate.fromIso8601(item.time) const position = Cesium.Cartesian3.fromDegrees(item.x, item.y, item.z) // 添加每一个链接点的信息,到达的时间以及坐标位置 property.addSample(thisTime, position) } property.setInterpolationOptions({ interpolationDegree: 2, interpolationAlgorithm: Cesium.LagrangePolynomialApproximation }) return property }