import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 // 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并) export const mapOptions = { scene: { center: { lat: 12.845055, lng: 112.931363, alt: 24286797, heading: 3, pitch: -90 }, cameraController: { zoomFactor: 3.0, minimumZoomDistance: 1000, maximumZoomDistance: 300000000, 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控件的样式 map.clock.shouldAnimate = true map.clock.multiplier = 60 // 速度 addGraphicLayer() } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } function addGraphicLayer() { // 创建矢量数据图层 const graphicLayer = new mars3d.layer.GraphicLayer() map.addLayer(graphicLayer) graphicLayer.on(mars3d.EventType.click, function (event) { console.log("单击了卫星", event) }) graphicLayer.bindPopup(function (event) { const attr = event.graphic.attr || {} attr["类型"] = event.graphic.type attr["备注"] = "我支持鼠标交互" return mars3d.Util.getTemplateHtml({ title: "卫星图层", template: "all", attr: attr }) }) const weixin = new mars3d.graphic.Satellite({ name: "GAOFEN 1", tle1: "1 39150U 13018A 21180.50843864 .00000088 00000-0 19781-4 0 9997", tle2: "2 39150 97.8300 252.9072 0018449 344.7422 15.3253 14.76581022440650", model: { url: "//data.mars3d.cn/gltf/mars/weixin2.gltf", scale: 1, minimumPixelSize: 90, autoHeading: true, show: true }, label: { color: "#ffffff", opacity: 1, font_family: "楷体", font_size: 30, outline: true, outlineColor: "#000000", outlineWidth: 3, background: true, backgroundColor: "#000000", backgroundOpacity: 0.5, font_weight: "normal", font_style: "normal", pixelOffsetX: 0, pixelOffsetY: -20, scaleByDistance: true, scaleByDistance_far: 10000000, scaleByDistance_farValue: 0.4, scaleByDistance_near: 100000, scaleByDistance_nearValue: 1, show: true }, path: { show: true, color: "#00ff00", opacity: 0.5, width: 1 } }) graphicLayer.addGraphic(weixin) // 目标卫星 const winxinMB = new mars3d.graphic.Satellite({ name: "COSMOS 2251 DEB", tle1: "1 33916U 93036DV 21197.38574736 .00000034 00000-0 48020-4 0 9991", tle2: "2 33916 74.0517 160.4563 0330253 328.4241 153.7022 13.66391564618811", model: { url: "//data.mars3d.cn/gltf/mars/weixin.gltf", scale: 1, minimumPixelSize: 90, autoHeading: true, show: true }, label: { color: "#ffffff", opacity: 1, font_family: "楷体", font_size: 30, outline: true, outlineColor: "#000000", outlineWidth: 3, background: true, backgroundColor: "#000000", backgroundOpacity: 0.5, font_weight: "normal", font_style: "normal", pixelOffsetX: 0, pixelOffsetY: -20, scaleByDistance: true, scaleByDistance_far: 10000000, scaleByDistance_farValue: 0.4, scaleByDistance_near: 100000, scaleByDistance_nearValue: 1, show: true }, path: { show: true, color: "#00ff00", opacity: 0.5, width: 1 } }) graphicLayer.addGraphic(winxinMB) // 四棱椎体 const rectSensor = new mars3d.graphic.RectSensor({ position: new Cesium.CallbackProperty(function (time) { return weixin.position }, false), style: { angle1: 10, angle2: 10, color: "rgba(0,255,0,0.4)", outline: true, topShow: true, topSteps: 2, rayEllipsoid: true // 与地球求交 } }) graphicLayer.addGraphic(rectSensor) // 追踪目标 rectSensor.lookAt = new Cesium.CallbackProperty(function (time) { return winxinMB.position }, false) }