| | |
| | | import AmapMercatorTilingScheme from '@/utils/cesium/AmapMercatorTilingScheme' |
| | | import { Cartesian3, Terrain, Viewer } from 'cesium' |
| | | import { addBlueFilter } from '@/utils/cesium/common' |
| | | import CreateFrustum from '@/utils/cesium/frustum/CreateFrustum' |
| | | import aircraftGltf from '@/assets/gltf/aircraft.gltf' |
| | | import { useTaskWayline } from '@/hooks/useTaskWayline/useTaskWayline' |
| | | |
| | | const { init: initTaskWayline } = useTaskWayline() |
| | | |
| | | const imageryProvider_ammapSL = new Cesium.UrlTemplateImageryProvider({ |
| | | url: 'https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', |
| | |
| | | const taskDetailsViewer = inject('taskDetailsViewer') |
| | | |
| | | const taskDetails = inject('taskDetails') |
| | | const deviceOsdInfo = inject('deviceOsdInfo') |
| | | const wsInfo = inject('wsInfo') |
| | | |
| | | const initMap = () => { |
| | | taskDetailsViewer.value = new Viewer('currentTaskMap', { |
| | |
| | | taskDetailsViewer?.value.camera.setView({ |
| | | destination: Cartesian3.fromDegrees(115.763819, 28.787374, 5000), |
| | | }) |
| | | |
| | | initTaskWayline(taskDetailsViewer.value, wsInfo, taskDetails) |
| | | } |
| | | |
| | | let viewInfoFrustum |
| | | // 设置视椎 |
| | | const setCreateFrustum = () => { |
| | | const host = deviceOsdInfo.value?.data?.host |
| | | if (!host) return |
| | | viewInfoFrustum?.clear() |
| | | if ([14, 0].includes(host.mode_code)) return |
| | | const attitude_head = 180 + host.attitude_head |
| | | const gimbal_pitch = 90 - Number(host?.payloads[0]?.gimbal_pitch) || 0 |
| | | viewInfoFrustum = new CreateFrustum(taskDetailsViewer?.value, { |
| | | position: { |
| | | longitude: host.longitude, |
| | | latitude: host.latitude, |
| | | altitude: host.height, |
| | | }, |
| | | width: 30, |
| | | height: 30, |
| | | fov: 20.0, |
| | | near: 3.0, |
| | | far: 250.0, |
| | | roll: gimbal_pitch, |
| | | pitch: 0, |
| | | heading: attitude_head, |
| | | }) |
| | | } |
| | | |
| | | function setAircraftGltf() { |
| | | const host = deviceOsdInfo.value?.data?.host |
| | | const aircraftEntity = taskDetailsViewer.value.entities.getById('aircraftGltf') |
| | | const position = Cesium.Cartesian3.fromDegrees(host.longitude, host.latitude, host.height) |
| | | if (aircraftEntity) { |
| | | aircraftEntity.position = new Cesium.ConstantPositionProperty(position) |
| | | return |
| | | } |
| | | taskDetailsViewer.value.entities.add({ |
| | | id: 'aircraftGltf', |
| | | position, |
| | | model: { |
| | | uri: aircraftGltf, // 或 .glb |
| | | scale: 1.0, // 缩放比例 |
| | | minimumPixelSize: 64, // 最小像素尺寸(保证模型远处可见) |
| | | maximumScale: 128, // 最大缩放(可选) |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | watch(deviceOsdInfo, () => { |
| | | setCreateFrustum() |
| | | setAircraftGltf() |
| | | }) |
| | | |
| | | useTaskWayline(taskDetailsViewer, taskDetails) |
| | | |
| | | const removeMap = () => { |
| | | taskDetailsViewer?.value.entities.removeAll() |