1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| <template> <CesiumMap loadTerrain enableTimeline @viewerCreated="viewerCreated" /> <div class="panel"> <el-form :model="form" label-suffix=":" label-width="auto"> <el-form-item label="追踪实体"> <el-radio-group v-model="form.entity" @change="handleTrackingEntityChange"> <el-radio value="satellites">卫星</el-radio> <el-radio value="drone">无人机</el-radio> </el-radio-group> </el-form-item> <el-form-item label="追踪参考系"> <el-select class="select" v-model="form.frame" placeholder="空" @change="handleFrameChange"> <el-option v-for="item in frames" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-form> </div> </template>
<script setup>
import { verifyTerrain } from "@/utils/utils.js";
let viewer, dataSource, satellite, drone;
const startTime = Cesium.JulianDate.fromIso8601("2012-03-15T10:00:00Z"); const satelliteStopTime = Cesium.JulianDate.fromIso8601("2012-03-16T10:00:00Z"); const droneStopTime = Cesium.JulianDate.fromIso8601("2012-03-15T10:00:30Z");
const form = reactive({ entity: "satellites", frame: "AUTODETECT", });
const frames = ref([ { value: "AUTODETECT", label: "自动检测", }, { value: "INERTIAL", label: "惯性坐标系", }, { value: "VELOCITY", label: "速度坐标系", }, { value: "ENU", label: "东北天坐标系", }, ]);
async function viewerCreated(v) { viewer = v; init(); }
async function init() { dataSource = await viewer.dataSources.add( Cesium.CzmlDataSource.load("../SampleData/tracking.czml") ); satellite = dataSource.entities.getById("Satellite/ISS"); drone = dataSource.entities.getById("CesiumDrone"); satellite.viewFrom = new Cesium.Cartesian3(-300, 20, 100); drone.viewFrom = new Cesium.Cartesian3(-50, 0, 5); handleTrackingEntityChange(form.entity); handleFrameChange(form.frame); }
function handleTrackingEntityChange(value) { viewer.clock.currentTime = startTime; if (value === "satellites") { viewer.clock.stopTime = satelliteStopTime; viewer.clock.multiplier = 30; viewer.timeline.zoomTo(startTime, satelliteStopTime); viewer.trackedEntity = satellite; } else if (value === "drone") { viewer.clock.stopTime = droneStopTime; viewer.clock.multiplier = 1; viewer.timeline.zoomTo(startTime, droneStopTime); viewer.trackedEntity = drone; } }
function handleFrameChange(value) { switch (value) { case "AUTODETECT": satellite.trackingReferenceFrame = Cesium.TrackingReferenceFrame.AUTODETECT; drone.trackingReferenceFrame = Cesium.TrackingReferenceFrame.AUTODETECT; break; case "INERTIAL": satellite.trackingReferenceFrame = Cesium.TrackingReferenceFrame.INERTIAL; drone.trackingReferenceFrame = Cesium.TrackingReferenceFrame.INERTIAL; break; case "VELOCITY": satellite.trackingReferenceFrame = Cesium.TrackingReferenceFrame.VELOCITY; drone.trackingReferenceFrame = Cesium.TrackingReferenceFrame.VELOCITY; break; case "ENU": satellite.trackingReferenceFrame = Cesium.TrackingReferenceFrame.ENU; drone.trackingReferenceFrame = Cesium.TrackingReferenceFrame.ENU; break; default: break; } } </script>
<style lang="scss" scoped> .panel { position: absolute; width: 350px; top: 10px; right: 10px; background-color: white; border-radius: 4px; z-index: 2; padding: 10px 5px 10px 10px; opacity: 0.96; box-shadow: rgba(195, 191, 188, 0.7) 0px 1px 2px 0px, rgba(195, 191, 188, 0.85) 0px 2px 4px 2px; }
:deep(.el-form-item) { margin-bottom: 6px; } </style>
|