import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 let weixin // 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并) export const mapOptions = { scene: { center: { lat: 12.845055, lng: 112.931363, alt: 24286797, heading: 3, pitch: -90 }, globe: { enableLighting: true }, cameraController: { zoomFactor: 3.0, minimumZoomDistance: 1000, maximumZoomDistance: 300000000, constrainedAxis: false // 解除在南北极区域鼠标操作限制 } }, control: { clockAnimate: true, // 时钟动画控制(左下角) timeline: true, // 是否显示时间线控件 compass: { top: "10px", left: "5px" } }, layers: [ { name: "夜晚图片", icon: "img/basemaps/blackMarble.png", type: "image", url: "//data.mars3d.cn/file/img/world/night2.jpg", dayAlpha: 0.1, nightAlpha: 1.0, brightness: 3.5, show: true } ] } export const eventTarget = new mars3d.BaseClass() // 事件对象,用于抛出事件到面板中 /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @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 = 1 // 速度 addSatellite() } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } function addSatellite() { // 创建矢量数据图层 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 }) }) weixin = new mars3d.graphic.Satellite({ name: "BEIDOU M6", tle1: "1 38775U 12050B 19233.58396017 .00000002 00000-0 00000+0 0 9996", tle2: "2 38775 54.9682 146.4459 0022572 250.3518 274.6095 1.86232229 47268", fixedFrameTransform: Cesium.Transforms.localFrameToFixedFrameGenerator("east", "south"), model: { url: "//data.mars3d.cn/gltf/mars/weixin.gltf", autoHeading: false, show: true }, path: { color: "#36d9ec", show: true }, cone: { sensorType: mars3d.graphic.SatelliteSensor.Type.Rect, reverse: false, rayEllipsoid: true, show: true, list: [ { name: "高分相机A", angle1: 4.03, // 视场张角1(度) angle2: 4.03, // 视场张角2(度) pitchOffset: 3.7, // 安装偏转角(度) color: "#ff0000", show: true }, { name: "高分相机B", angle1: 3.1, // 视场张角1(度) angle2: 3.1, // 视场张角2(度) pitchOffset: -3.7, // 安装偏转角(度) color: "#0000ff", show: true }, { name: "多光谱相机A", angle1: 4.5, // 视场张角1(度) angle2: 4.5, // 视场张角2(度) pitchOffset: 4.35, // 安装偏转角(度) color: "#ffff00", show: true }, { name: "多光谱相机B", angle1: 4.5, // 视场张角1(度) angle2: 4.5, // 视场张角2(度) pitchOffset: -4.35, // 安装偏转角(度) color: "#00ffff", show: true } ] } }) graphicLayer.addGraphic(weixin) const weixinData = {} weixinData.name = weixin.name weixinData.tle1 = weixin.options.tle1 weixinData.tle2 = weixin.options.tle2 // 显示实时坐标和时间 weixin.on(mars3d.EventType.change, function (event) { const date = Cesium.JulianDate.toDate(map.clock.currentTime) weixinData.time = mars3d.Util.formatDate(date, "yyyy-MM-dd HH:mm:ss") if (weixin.position) { const point = mars3d.LngLatPoint.fromCartesian(weixin.position) weixinData.td_jd = point.lng weixinData.td_wd = point.lat weixinData.td_gd = mars3d.MeasureUtil.formatDistance(point.alt) eventTarget.fire("satelliteChange", { weixinData }) } }) // 动态扫描视锥体 const saomiaoSensor = new mars3d.graphic.SatelliteSensor({ position: weixin.property, autoHeading: true, style: { sensorType: mars3d.graphic.SatelliteSensor.Type.Rect, angle1: 4.5, angle2: 0.01, heading: weixin.heading, roll: weixin.roll, pitch: 0, color: "rgba(255,0,0,0.4)" } }) graphicLayer.addGraphic(saomiaoSensor) // 动态pitch角 const maxHeight = 9 const step = 0.1 let currPitch = maxHeight let isUp = -1 const update_old = saomiaoSensor.update saomiaoSensor.update = function(frameState) { if (currPitch <= -maxHeight && isUp !== 1) { isUp = 1 } else if (currPitch >= maxHeight && isUp !== -1) { isUp = -1 } currPitch += step * isUp saomiaoSensor.pitch = currPitch return update_old.bind(this)(frameState) } } // 定位至卫星 export function locate() { weixin.flyTo() } // 参考轴系显示与隐藏 export function chkShowModelMatrix(val) { weixin.debugAxis = val }