| | |
| | | const CLUSTER_HEIGHT = 100000 |
| | | const DETAIL_HEIGHT = 10000 |
| | | const POLYGON_HEIGHT_M = 0.2 |
| | | const DRONE_TRACK_DURATION_S = 10 * 60 |
| | | const DRONE_TRACK_DURATION_S = 30 * 60 |
| | | |
| | | const props = defineProps({ |
| | | allDevices: { |
| | |
| | | offset: Math.random() * PULSE_DURATION_S, |
| | | entity: null, |
| | | } |
| | | const getPulseHeight = () => { |
| | | const pos = getBillboardPosition(billboard) |
| | | if (!pos) return 0 |
| | | const carto = Cesium.Cartographic.fromCartesian(pos) |
| | | return carto?.height ?? 0 |
| | | } |
| | | pulse.entity = viewer.entities.add({ |
| | | position: new Cesium.CallbackProperty(() => getBillboardPosition(billboard), false), |
| | | ellipse: { |
| | | semiMajorAxis: new Cesium.CallbackProperty(() => getPulseRadius(pulse), false), |
| | | semiMinorAxis: new Cesium.CallbackProperty(() => getPulseRadius(pulse), false), |
| | | material, |
| | | heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, |
| | | height: new Cesium.CallbackProperty(() => getPulseHeight(), false), |
| | | heightReference: Cesium.HeightReference.NONE, |
| | | }, |
| | | }) |
| | | favoritePulseEntities.push(pulse) |