吉安感知网项目-前端
shuishen
2026-02-04 da6d9502c67d5628c9e3aee8a1dbd802079fe862
feat:设备以及场景固定高度
1 files modified
54 ■■■■■ changed files
applications/drone-command/src/components/map-container/device-map-container.vue 54 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/components/map-container/device-map-container.vue
@@ -892,32 +892,26 @@
        const entityId = `online-device-${item.id ?? index}-${index}`
        const rangeMeters = getDeviceRange(item)
        devicePositions.push({ lng: position.longitude, lat: position.latitude })
        const billboard = deviceBillboardCollection.add({
            position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0),
            image: isOnline ? equipmentIcon : offlineEquipmentIcon,
            width: 40,
            height: 56,
            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
        })
        billboard.id = entityId
        devicePickMap.set(entityId, { data: item, billboard })
        deviceEntries.push({ position, rangeMeters, billboard, isOnline })
        deviceEntries.push({ position, rangeMeters, isOnline, entityId, data: item })
    })
    if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) {
        closePopup()
    }
    if (deviceEntries.length) {
        const heights = await getPointPositionsHeight(devicePositions, viewer)
        deviceEntries.forEach((entry, index) => {
            const height = Number(heights?.[index]?.ASL)
            const centerHeight = Number.isFinite(height) ? height : 0
            if (entry.billboard) {
                entry.billboard.position = Cesium.Cartesian3.fromDegrees(
            const billboard = deviceBillboardCollection.add({
                position: Cesium.Cartesian3.fromDegrees(
                    entry.position.longitude,
                    entry.position.latitude,
                    centerHeight
                )
            }
                ),
                image: entry.isOnline ? equipmentIcon : offlineEquipmentIcon,
                width: 40,
                height: 56,
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
            })
            billboard.id = entry.entityId
            devicePickMap.set(entry.entityId, { data: entry.data, billboard })
            if (!entry.isOnline) return
            if (!Number.isFinite(entry.rangeMeters) || entry.rangeMeters <= 0) return
            const primitive = createDeviceRangePrimitiveWithHeight(entry.position, entry.rangeMeters, centerHeight)
@@ -926,6 +920,9 @@
            addCockpitPrimitive(primitive)
            deviceRingFillPrimitives.push(primitive)
        })
    }
    if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) {
        closePopup()
    }
    reorderCockpitPrimitives()
}
@@ -1273,22 +1270,37 @@
const handleDroneSignal = () => emit('droneSignal', selectedDevice.value)
const handleDroneCounter = () => emit('droneCounter', selectedDevice.value)
const renderCommandPosts = list => {
const renderCommandPosts = async list => {
    if (!viewer) return
    ensureCommandPostCollection()
    commandPostBillboardCollection.removeAll()
    commandPostBillboardCollection.show = detailVisible.value
    const entries = []
    const positions = []
        ; (list || []).forEach((item, index) => {
            const position = getDevicePosition(item)
            if (!position) return
            entries.push({ position, index })
            positions.push({ lng: position.longitude, lat: position.latitude })
        })
    if (positions.length) {
        const heights = await getPointPositionsHeight(positions, viewer)
        entries.forEach((entry, idx) => {
            const height = Number(heights?.[idx]?.ASL)
            const centerHeight = Number.isFinite(height) ? height : 0
            commandPostBillboardCollection.add({
                position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0),
                position: Cesium.Cartesian3.fromDegrees(
                    entry.position.longitude,
                    entry.position.latitude,
                    centerHeight
                ),
                image: commandPostIcon,
                width: 40,
                height: 56,
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
            })
        })
    }
    reorderCockpitPrimitives()
}
@@ -1308,9 +1320,9 @@
        const res = await newDefenseSceneManageList({
            time: dayjs().format('YYYY-MM-DD HH:mm:ss')
        })
        renderCommandPosts(res?.data?.data ?? [])
        await renderCommandPosts(res?.data?.data ?? [])
    } catch (error) {
        renderCommandPosts([])
        await renderCommandPosts([])
    }
}