From da6d9502c67d5628c9e3aee8a1dbd802079fe862 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 04 Feb 2026 16:47:46 +0800
Subject: [PATCH] feat:设备以及场景固定高度

---
 applications/drone-command/src/components/map-container/device-map-container.vue |   54 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/applications/drone-command/src/components/map-container/device-map-container.vue b/applications/drone-command/src/components/map-container/device-map-container.vue
index 7d6383c..dafcb0b 100644
--- a/applications/drone-command/src/components/map-container/device-map-container.vue
+++ b/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([])
 	}
 }
 

--
Gitblit v1.9.3