多mb轨迹控制打开和显隐等
This commit is contained in:
		
							parent
							
								
									20f73b3364
								
							
						
					
					
						commit
						61acdaa593
					
				@ -1,10 +1,11 @@
 | 
				
			|||||||
import { NIcon, NPopover } from 'naive-ui'
 | 
					import { NIcon, NPopover } from 'naive-ui'
 | 
				
			||||||
import { useMultiMBTrajectory } from '@/views/Mubiao/components/MultiHisTrajectory/hooks/multiMbTraj'
 | 
					// import { useMultiMBTrajectory } from '@/views/Mubiao/components/MultiHisTrajectory/hooks/multiMbTraj'
 | 
				
			||||||
 | 
					import { useMultiTraj } from '@/views/MultiTrajPlayback/hooks/useMultiTraj'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
  setup() {
 | 
					  setup() {
 | 
				
			||||||
    const { showMultiHisTrajCom, showOrHideMultiHisTraj } =
 | 
					    const { createMultiTrajPlayback, createOrDestroyMultiTrajPlayback } =
 | 
				
			||||||
      useMultiMBTrajectory()
 | 
					      useMultiTraj()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // const handleClick = () => {
 | 
					    // const handleClick = () => {
 | 
				
			||||||
    //   showMultiHisTrajCom.value = !showMultiHisTrajCom.value
 | 
					    //   showMultiHisTrajCom.value = !showMultiHisTrajCom.value
 | 
				
			||||||
@ -19,9 +20,9 @@ export default defineComponent({
 | 
				
			|||||||
            trigger: () => (
 | 
					            trigger: () => (
 | 
				
			||||||
              <div
 | 
					              <div
 | 
				
			||||||
                class={`btn-class ${
 | 
					                class={`btn-class ${
 | 
				
			||||||
                  showMultiHisTrajCom.value ? 'checked' : ''
 | 
					                  createMultiTrajPlayback.value ? 'checked' : ''
 | 
				
			||||||
                }`}
 | 
					                }`}
 | 
				
			||||||
                onClick={showOrHideMultiHisTraj}
 | 
					                onClick={createOrDestroyMultiTrajPlayback}
 | 
				
			||||||
              >
 | 
					              >
 | 
				
			||||||
                <NIcon size="16">
 | 
					                <NIcon size="16">
 | 
				
			||||||
                  <svg
 | 
					                  <svg
 | 
				
			||||||
 | 
				
			|||||||
@ -39,7 +39,8 @@ const { getTextConfigs, initWebSocket } = useTextReport()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const { showHisImageCom } = useHisImage()
 | 
					const { showHisImageCom } = useHisImage()
 | 
				
			||||||
const { showHisTrajCom } = useMBTrajectory()
 | 
					const { showHisTrajCom } = useMBTrajectory()
 | 
				
			||||||
const { showMultiHisTrajCom, showMultiHisTrajDrawer } = useMultiTraj()
 | 
					const { showMultiHisTrajCom, showMultiHisTrajDrawer, createMultiTrajPlayback } =
 | 
				
			||||||
 | 
					  useMultiTraj()
 | 
				
			||||||
const { showDdConfigCom } = useDaodan()
 | 
					const { showDdConfigCom } = useDaodan()
 | 
				
			||||||
const getConfig = async () => {
 | 
					const getConfig = async () => {
 | 
				
			||||||
  const res = await getTextConfigs()
 | 
					  const res = await getTextConfigs()
 | 
				
			||||||
@ -242,6 +243,7 @@ const showOrHideTextReport = () => {
 | 
				
			|||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <multi-traj-playback
 | 
					        <multi-traj-playback
 | 
				
			||||||
 | 
					          v-if="createMultiTrajPlayback"
 | 
				
			||||||
          class="btn-transform absolute left-0 top-0"
 | 
					          class="btn-transform absolute left-0 top-0"
 | 
				
			||||||
          :class="showMultiHisTrajDrawer ? '' : 'btn-transform-pos'"
 | 
					          :class="showMultiHisTrajDrawer ? '' : 'btn-transform-pos'"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,37 @@
 | 
				
			|||||||
import { ref } from 'vue'
 | 
					import { ref } from 'vue'
 | 
				
			||||||
import { useSatellite } from '../../Satellite/hooks/satellite'
 | 
					import { useSatellite } from '../../Satellite/hooks/satellite'
 | 
				
			||||||
export function useMultiSatTraj() {
 | 
					export function useMultiSatTraj() {
 | 
				
			||||||
 | 
					  const multiSatTrajMap = new Map()
 | 
				
			||||||
 | 
					  const satellitePayloadStatusMap = ref(new Map())
 | 
				
			||||||
 | 
					  const { addSatellite } = useSatellite()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function addSatelliteTraj(satelliteList = [], timeRange) {
 | 
				
			||||||
 | 
					    satelliteList.forEach(({ id, tle }) => {
 | 
				
			||||||
 | 
					      if (!multiSatTrajMap.has(id)) {
 | 
				
			||||||
 | 
					        const satellite = addSatellite(
 | 
				
			||||||
 | 
					          { id, tle },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            startTime: new Date(timeRange[0]).toISOString() || new Date(),
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        satellite.sensor = true
 | 
				
			||||||
 | 
					        multiSatTrajMap.set(id, satellite)
 | 
				
			||||||
 | 
					        satellitePayloadStatusMap.value.set(id, satellite.sensor)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function changeSatellitePayloadStatus(id, status) {
 | 
				
			||||||
 | 
					    multiSatTrajMap.has(id) && (multiSatTrajMap.get(id).sensor = status)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function removeAllMultiSatelliteTraj() {
 | 
				
			||||||
 | 
					    for (let [key, satellite] of multiSatTrajMap.entries()) {
 | 
				
			||||||
 | 
					      satellite.destroy()
 | 
				
			||||||
 | 
					      multiSatTrajMap.delete(key)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    addSatelliteTraj,
 | 
					    addSatelliteTraj,
 | 
				
			||||||
    removeAllMultiSatelliteTraj,
 | 
					    removeAllMultiSatelliteTraj,
 | 
				
			||||||
@ -8,35 +39,3 @@ export function useMultiSatTraj() {
 | 
				
			|||||||
    changeSatellitePayloadStatus,
 | 
					    changeSatellitePayloadStatus,
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
const multiSatTrajMap = new Map()
 | 
					 | 
				
			||||||
const satellitePayloadStatusMap = ref(new Map())
 | 
					 | 
				
			||||||
const { addSatellite } = useSatellite()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function addSatelliteTraj(satelliteList = [], timeRange) {
 | 
					 | 
				
			||||||
  satelliteList.forEach(({ id, tle }) => {
 | 
					 | 
				
			||||||
    if (!multiSatTrajMap.has(id)) {
 | 
					 | 
				
			||||||
      const satellite = addSatellite(
 | 
					 | 
				
			||||||
        { id, tle },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          startTime: new Date(timeRange[0]).toISOString() || new Date(),
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      satellite.sensor = true
 | 
					 | 
				
			||||||
      multiSatTrajMap.set(id, satellite)
 | 
					 | 
				
			||||||
      satellitePayloadStatusMap.value.set(id, satellite.sensor)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function changeSatellitePayloadStatus(id, status) {
 | 
					 | 
				
			||||||
  multiSatTrajMap.has(id) && (multiSatTrajMap.get(id).sensor = status)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function removeAllMultiSatelliteTraj() {
 | 
					 | 
				
			||||||
  for (let [key, satellite] of multiSatTrajMap.entries()) {
 | 
					 | 
				
			||||||
    satellite.destroy()
 | 
					 | 
				
			||||||
    multiSatTrajMap.delete(key)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ import { useMultiZBTraj } from './useMultiZBTraj'
 | 
				
			|||||||
import { useMultiHJTraj } from './useMultiHJTraj'
 | 
					import { useMultiHJTraj } from './useMultiHJTraj'
 | 
				
			||||||
import { useMultiDDTraj } from './useMultiDDTraj'
 | 
					import { useMultiDDTraj } from './useMultiDDTraj'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const timesMap = ref(new Map())
 | 
					 | 
				
			||||||
const times = ref([])
 | 
					const times = ref([])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const customElapsedTime = ref(0)
 | 
					const customElapsedTime = ref(0)
 | 
				
			||||||
@ -75,9 +74,21 @@ export function useMultiTraj() {
 | 
				
			|||||||
    showOrHideMultiHisTrajDrawer,
 | 
					    showOrHideMultiHisTrajDrawer,
 | 
				
			||||||
    allMultiPayloadStatusMap,
 | 
					    allMultiPayloadStatusMap,
 | 
				
			||||||
    changeRadarStatus,
 | 
					    changeRadarStatus,
 | 
				
			||||||
 | 
					    createMultiTrajPlayback,
 | 
				
			||||||
 | 
					    createOrDestroyMultiTrajPlayback,
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function resetAllEffect() {
 | 
				
			||||||
 | 
					  checkedAllKeys.value = {
 | 
				
			||||||
 | 
					    zb: [],
 | 
				
			||||||
 | 
					    dd: [],
 | 
				
			||||||
 | 
					    satellite: [],
 | 
				
			||||||
 | 
					    hj: [],
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  resetPlayEffect()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 所有树勾选的ids
 | 
					// 所有树勾选的ids
 | 
				
			||||||
const checkedAllKeys = ref({
 | 
					const checkedAllKeys = ref({
 | 
				
			||||||
  zb: [],
 | 
					  zb: [],
 | 
				
			||||||
@ -86,6 +97,13 @@ const checkedAllKeys = ref({
 | 
				
			|||||||
  hj: [],
 | 
					  hj: [],
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const createMultiTrajPlayback = ref(false)
 | 
				
			||||||
 | 
					function createOrDestroyMultiTrajPlayback() {
 | 
				
			||||||
 | 
					  createMultiTrajPlayback.value = !createMultiTrajPlayback.value
 | 
				
			||||||
 | 
					  !createMultiTrajPlayback.value &&
 | 
				
			||||||
 | 
					    (resetAllEffect(), resetTime(), removeAllEntity())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const showMultiHisTrajDrawer = ref(false)
 | 
					const showMultiHisTrajDrawer = ref(false)
 | 
				
			||||||
// 显示或隐藏多目标历史轨迹抽屉
 | 
					// 显示或隐藏多目标历史轨迹抽屉
 | 
				
			||||||
function showOrHideMultiHisTrajDrawer() {
 | 
					function showOrHideMultiHisTrajDrawer() {
 | 
				
			||||||
@ -97,8 +115,16 @@ const showMultiHisTrajCom = ref(false)
 | 
				
			|||||||
// 显示或隐藏多目标历史轨迹组件
 | 
					// 显示或隐藏多目标历史轨迹组件
 | 
				
			||||||
function showOrHideMultiHisTraj() {
 | 
					function showOrHideMultiHisTraj() {
 | 
				
			||||||
  showMultiHisTrajCom.value = !showMultiHisTrajCom.value
 | 
					  showMultiHisTrajCom.value = !showMultiHisTrajCom.value
 | 
				
			||||||
 | 
					  !showMultiHisTrajCom.value &&
 | 
				
			||||||
 | 
					    (resetPlayEffect(), resetTime(), removeAllEntity())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  !showMultiHisTrajCom.value && (resetTime(), removeAllEntity())
 | 
					function resetPlayEffect() {
 | 
				
			||||||
 | 
					  times.value = []
 | 
				
			||||||
 | 
					  customElapsedTime.value = 0
 | 
				
			||||||
 | 
					  animationSpeed.value = 1
 | 
				
			||||||
 | 
					  isAnimationRunning.value = false
 | 
				
			||||||
 | 
					  isPaused.value = false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const { getZBHisTraj, getSatelliteHisTraj, getDDHisTraj, getHJHisTraj } =
 | 
					const { getZBHisTraj, getSatelliteHisTraj, getDDHisTraj, getHJHisTraj } =
 | 
				
			||||||
@ -106,8 +132,6 @@ const { getZBHisTraj, getSatelliteHisTraj, getDDHisTraj, getHJHisTraj } =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 加载多目标历史轨迹
 | 
					// 加载多目标历史轨迹
 | 
				
			||||||
function loadMultiHisTraj(timeRange) {
 | 
					function loadMultiHisTraj(timeRange) {
 | 
				
			||||||
  console.log(timeRange)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const dictFunc = {
 | 
					  const dictFunc = {
 | 
				
			||||||
    zb: getZBHisTraj,
 | 
					    zb: getZBHisTraj,
 | 
				
			||||||
    dd: getDDHisTraj,
 | 
					    dd: getDDHisTraj,
 | 
				
			||||||
@ -174,10 +198,8 @@ const allMultiPayloadChangeFun = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function changeRadarStatus({ id, type }) {
 | 
					function changeRadarStatus({ id, type }) {
 | 
				
			||||||
  console.log(id, type)
 | 
					 | 
				
			||||||
  const statusMap = allMultiPayloadStatusMap.value[type]
 | 
					  const statusMap = allMultiPayloadStatusMap.value[type]
 | 
				
			||||||
  if (statusMap) {
 | 
					  if (statusMap) {
 | 
				
			||||||
    console.log(statusMap)
 | 
					 | 
				
			||||||
    if (statusMap.has(id)) {
 | 
					    if (statusMap.has(id)) {
 | 
				
			||||||
      const status = !statusMap.get(id)
 | 
					      const status = !statusMap.get(id)
 | 
				
			||||||
      statusMap.set(id, status)
 | 
					      statusMap.set(id, status)
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,160 @@ import { useEntity } from '@/hooks/entity'
 | 
				
			|||||||
import { getDirection } from '@/utils/pos'
 | 
					import { getDirection } from '@/utils/pos'
 | 
				
			||||||
import { useDetectionLoad } from './useDetectionLoad'
 | 
					import { useDetectionLoad } from './useDetectionLoad'
 | 
				
			||||||
export function useMultiZBTraj() {
 | 
					export function useMultiZBTraj() {
 | 
				
			||||||
 | 
					  const multiZBTrajMap = new Map()
 | 
				
			||||||
 | 
					  const { getMBEntityOpt } = useEntity()
 | 
				
			||||||
 | 
					  // 添加多目标目标和轨迹
 | 
				
			||||||
 | 
					  function addMultiZBTraj(zbList) {
 | 
				
			||||||
 | 
					    removeAllMultiZBTraj()
 | 
				
			||||||
 | 
					    Object.keys(zbList).forEach(async id => {
 | 
				
			||||||
 | 
					      if (!multiZBTrajMap.has(id)) {
 | 
				
			||||||
 | 
					        const { info, list: trajList } = zbList[id]
 | 
				
			||||||
 | 
					        const { targetType, country, extendInfo } = info
 | 
				
			||||||
 | 
					        const ZBOpt = await getMBEntityOpt({
 | 
				
			||||||
 | 
					          id,
 | 
				
			||||||
 | 
					          targetType,
 | 
				
			||||||
 | 
					          country,
 | 
				
			||||||
 | 
					          extendInfo: null,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const startTime = trajList[0].target_time
 | 
				
			||||||
 | 
					        const endTime = trajList.at(-1).target_time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const positions = getPositions(trajList, targetType)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ZBOpt.billboard.rotation = new Cesium.CallbackProperty(currentTime => {
 | 
				
			||||||
 | 
					          const point1 = positions.position.getValue(currentTime)
 | 
				
			||||||
 | 
					          const nextTime = Cesium.JulianDate.addSeconds(
 | 
				
			||||||
 | 
					            currentTime,
 | 
				
			||||||
 | 
					            2,
 | 
				
			||||||
 | 
					            new Cesium.JulianDate()
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					          const point2 = positions.position.getValue(nextTime)
 | 
				
			||||||
 | 
					          if (point2 && point1) {
 | 
				
			||||||
 | 
					            const heading = getDirection(point1, point2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const angleDegrees = Cesium.Math.toDegrees(heading)
 | 
				
			||||||
 | 
					            return Cesium.Math.toRadians(angleDegrees)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }, false)
 | 
				
			||||||
 | 
					        Object.assign(ZBOpt, {
 | 
				
			||||||
 | 
					          ...getPositions(trajList, targetType),
 | 
				
			||||||
 | 
					          ...getPath(startTime, endTime),
 | 
				
			||||||
 | 
					          // ...getAvailability(startTime, endTime),
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        console.log('ZBOpt', ZBOpt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const ZBEntity = viewer.entities.add(ZBOpt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // ZBEntity.billboard.show = false
 | 
				
			||||||
 | 
					        // ZBEntity.model.show = true
 | 
				
			||||||
 | 
					        addPayload(id, extendInfo, ZBEntity)
 | 
				
			||||||
 | 
					        multiZBTrajMap.set(id, ZBEntity)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const { addSectorDetectionLoad, addConicDetectionLoad } = useDetectionLoad()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const payloadMap = new Map()
 | 
				
			||||||
 | 
					  const ZBPayloadStatusMap = ref(new Map())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function addPayload(id, extendInfo, ZBEntity) {
 | 
				
			||||||
 | 
					    extendInfo?.radarPayload &&
 | 
				
			||||||
 | 
					      extendInfo.radarPayload.forEach(item => {
 | 
				
			||||||
 | 
					        const radar = addSectorDetectionLoad({
 | 
				
			||||||
 | 
					          id: `${item.id}`,
 | 
				
			||||||
 | 
					          bindEntity: ZBEntity,
 | 
				
			||||||
 | 
					          ...item,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        payloadMap.set(id, [...(payloadMap.get(id) || []), radar])
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    extendInfo?.airplaneConicPayload &&
 | 
				
			||||||
 | 
					      extendInfo.airplaneConicPayload.forEach(item => {
 | 
				
			||||||
 | 
					        const conic = addConicDetectionLoad({
 | 
				
			||||||
 | 
					          id: `${item.id}`,
 | 
				
			||||||
 | 
					          bindEntity: ZBEntity,
 | 
				
			||||||
 | 
					          ...item,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        payloadMap.set(id, [...(payloadMap.get(id) || []), conic])
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    // console.log(payloadMap, 'payloadMap')
 | 
				
			||||||
 | 
					    ZBPayloadStatusMap.value.set(id, true)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  function changeZBPayloadStatus(id, status) {
 | 
				
			||||||
 | 
					    payloadMap.get(id)?.forEach(item => {
 | 
				
			||||||
 | 
					      item.show = status
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function getPositions(trajList, targetType) {
 | 
				
			||||||
 | 
					    const positionProperty = new Cesium.SampledPositionProperty()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    trajList.forEach(({ target_time, target_lon, target_lat }, index) => {
 | 
				
			||||||
 | 
					      const time = Cesium.JulianDate.fromDate(new Date(target_time))
 | 
				
			||||||
 | 
					      const position = Cesium.Cartesian3.fromDegrees(
 | 
				
			||||||
 | 
					        target_lon,
 | 
				
			||||||
 | 
					        target_lat,
 | 
				
			||||||
 | 
					        window.settings.mbDict[targetType].height
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					      positionProperty.addSample(time, position)
 | 
				
			||||||
 | 
					      // viewer.entities.add({
 | 
				
			||||||
 | 
					      //   position,
 | 
				
			||||||
 | 
					      //   point: {
 | 
				
			||||||
 | 
					      //     pixelSize: 3,
 | 
				
			||||||
 | 
					      //     color: Cesium.Color.RED,
 | 
				
			||||||
 | 
					      //   },
 | 
				
			||||||
 | 
					      // })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    positionProperty.setInterpolationOptions({
 | 
				
			||||||
 | 
					      interpolationDegree: 2,
 | 
				
			||||||
 | 
					      interpolationAlgorithm: Cesium.HermitePolynomialApproximation,
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      position: positionProperty,
 | 
				
			||||||
 | 
					      orientation: new Cesium.VelocityOrientationProperty(positionProperty),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function getPath(startTime, endTime) {
 | 
				
			||||||
 | 
					    console.log(new Date(startTime).getTime() - new Date(endTime).getTime())
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      path: new Cesium.PathGraphics({
 | 
				
			||||||
 | 
					        width: 0.5,
 | 
				
			||||||
 | 
					        // show: true,
 | 
				
			||||||
 | 
					        resolution: 1,
 | 
				
			||||||
 | 
					        leadTime: new Date(startTime).getTime() - new Date(endTime).getTime(),
 | 
				
			||||||
 | 
					        trailTime: new Date(startTime).getTime() - new Date(endTime).getTime(),
 | 
				
			||||||
 | 
					        material: Cesium.Color.fromRandom().withAlpha(1),
 | 
				
			||||||
 | 
					      }),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function getAvailability(startTime, endTime) {
 | 
				
			||||||
 | 
					    const start = Cesium.JulianDate.fromDate(new Date(startTime))
 | 
				
			||||||
 | 
					    const stop = Cesium.JulianDate.fromDate(new Date(endTime))
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      availability: new Cesium.TimeIntervalCollection([
 | 
				
			||||||
 | 
					        new Cesium.TimeInterval({ start: start, stop: stop }),
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function removeAllMultiZBTraj() {
 | 
				
			||||||
 | 
					    for (let [key, entity] of multiZBTrajMap.entries()) {
 | 
				
			||||||
 | 
					      viewer.entities.remove(entity)
 | 
				
			||||||
 | 
					      multiZBTrajMap.delete(key)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (let [key, entity] of payloadMap.entries()) {
 | 
				
			||||||
 | 
					      entity.forEach(item => {
 | 
				
			||||||
 | 
					        viewer.entities.remove(item)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      payloadMap.delete(key)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    multiZBTrajMap,
 | 
					    multiZBTrajMap,
 | 
				
			||||||
    addMultiZBTraj,
 | 
					    addMultiZBTraj,
 | 
				
			||||||
@ -10,160 +164,3 @@ export function useMultiZBTraj() {
 | 
				
			|||||||
    changeZBPayloadStatus,
 | 
					    changeZBPayloadStatus,
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
const multiZBTrajMap = new Map()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const { getMBEntityOpt } = useEntity()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 添加多目标目标和轨迹
 | 
					 | 
				
			||||||
function addMultiZBTraj(zbList) {
 | 
					 | 
				
			||||||
  removeAllMultiZBTraj()
 | 
					 | 
				
			||||||
  Object.keys(zbList).forEach(async id => {
 | 
					 | 
				
			||||||
    if (!multiZBTrajMap.has(id)) {
 | 
					 | 
				
			||||||
      const { info, list: trajList } = zbList[id]
 | 
					 | 
				
			||||||
      const { targetType, country, extendInfo } = info
 | 
					 | 
				
			||||||
      const ZBOpt = await getMBEntityOpt({
 | 
					 | 
				
			||||||
        id,
 | 
					 | 
				
			||||||
        targetType,
 | 
					 | 
				
			||||||
        country,
 | 
					 | 
				
			||||||
        extendInfo: null,
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const startTime = trajList[0].target_time
 | 
					 | 
				
			||||||
      const endTime = trajList.at(-1).target_time
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const positions = getPositions(trajList, targetType)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      ZBOpt.billboard.rotation = new Cesium.CallbackProperty(currentTime => {
 | 
					 | 
				
			||||||
        const point1 = positions.position.getValue(currentTime)
 | 
					 | 
				
			||||||
        const nextTime = Cesium.JulianDate.addSeconds(
 | 
					 | 
				
			||||||
          currentTime,
 | 
					 | 
				
			||||||
          2,
 | 
					 | 
				
			||||||
          new Cesium.JulianDate()
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        const point2 = positions.position.getValue(nextTime)
 | 
					 | 
				
			||||||
        if (point2 && point1) {
 | 
					 | 
				
			||||||
          const heading = getDirection(point1, point2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          const angleDegrees = Cesium.Math.toDegrees(heading)
 | 
					 | 
				
			||||||
          return Cesium.Math.toRadians(angleDegrees)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }, false)
 | 
					 | 
				
			||||||
      Object.assign(ZBOpt, {
 | 
					 | 
				
			||||||
        ...getPositions(trajList, targetType),
 | 
					 | 
				
			||||||
        ...getPath(startTime, endTime),
 | 
					 | 
				
			||||||
        // ...getAvailability(startTime, endTime),
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      console.log('ZBOpt', ZBOpt)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const ZBEntity = viewer.entities.add(ZBOpt)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // ZBEntity.billboard.show = false
 | 
					 | 
				
			||||||
      // ZBEntity.model.show = true
 | 
					 | 
				
			||||||
      addPayload(id, extendInfo, ZBEntity)
 | 
					 | 
				
			||||||
      multiZBTrajMap.set(id, ZBEntity)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const { addSectorDetectionLoad, addConicDetectionLoad } = useDetectionLoad()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const payloadMap = new Map()
 | 
					 | 
				
			||||||
const ZBPayloadStatusMap = ref(new Map())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function addPayload(id, extendInfo, ZBEntity) {
 | 
					 | 
				
			||||||
  extendInfo?.radarPayload &&
 | 
					 | 
				
			||||||
    extendInfo.radarPayload.forEach(item => {
 | 
					 | 
				
			||||||
      const radar = addSectorDetectionLoad({
 | 
					 | 
				
			||||||
        id: `${item.id}`,
 | 
					 | 
				
			||||||
        bindEntity: ZBEntity,
 | 
					 | 
				
			||||||
        ...item,
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      payloadMap.set(id, [...(payloadMap.get(id) || []), radar])
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  extendInfo?.airplaneConicPayload &&
 | 
					 | 
				
			||||||
    extendInfo.airplaneConicPayload.forEach(item => {
 | 
					 | 
				
			||||||
      const conic = addConicDetectionLoad({
 | 
					 | 
				
			||||||
        id: `${item.id}`,
 | 
					 | 
				
			||||||
        bindEntity: ZBEntity,
 | 
					 | 
				
			||||||
        ...item,
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      payloadMap.set(id, [...(payloadMap.get(id) || []), conic])
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  // console.log(payloadMap, 'payloadMap')
 | 
					 | 
				
			||||||
  ZBPayloadStatusMap.value.set(id, true)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
function changeZBPayloadStatus(id, status) {
 | 
					 | 
				
			||||||
  payloadMap.get(id)?.forEach(item => {
 | 
					 | 
				
			||||||
    item.show = status
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function getPositions(trajList, targetType) {
 | 
					 | 
				
			||||||
  const positionProperty = new Cesium.SampledPositionProperty()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  trajList.forEach(({ target_time, target_lon, target_lat }, index) => {
 | 
					 | 
				
			||||||
    const time = Cesium.JulianDate.fromDate(new Date(target_time))
 | 
					 | 
				
			||||||
    const position = Cesium.Cartesian3.fromDegrees(
 | 
					 | 
				
			||||||
      target_lon,
 | 
					 | 
				
			||||||
      target_lat,
 | 
					 | 
				
			||||||
      window.settings.mbDict[targetType].height
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    positionProperty.addSample(time, position)
 | 
					 | 
				
			||||||
    // viewer.entities.add({
 | 
					 | 
				
			||||||
    //   position,
 | 
					 | 
				
			||||||
    //   point: {
 | 
					 | 
				
			||||||
    //     pixelSize: 3,
 | 
					 | 
				
			||||||
    //     color: Cesium.Color.RED,
 | 
					 | 
				
			||||||
    //   },
 | 
					 | 
				
			||||||
    // })
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
  positionProperty.setInterpolationOptions({
 | 
					 | 
				
			||||||
    interpolationDegree: 2,
 | 
					 | 
				
			||||||
    interpolationAlgorithm: Cesium.HermitePolynomialApproximation,
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return {
 | 
					 | 
				
			||||||
    position: positionProperty,
 | 
					 | 
				
			||||||
    orientation: new Cesium.VelocityOrientationProperty(positionProperty),
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function getPath(startTime, endTime) {
 | 
					 | 
				
			||||||
  console.log(new Date(startTime).getTime() - new Date(endTime).getTime())
 | 
					 | 
				
			||||||
  return {
 | 
					 | 
				
			||||||
    path: new Cesium.PathGraphics({
 | 
					 | 
				
			||||||
      width: 0.5,
 | 
					 | 
				
			||||||
      // show: true,
 | 
					 | 
				
			||||||
      resolution: 1,
 | 
					 | 
				
			||||||
      leadTime: new Date(startTime).getTime() - new Date(endTime).getTime(),
 | 
					 | 
				
			||||||
      trailTime: new Date(startTime).getTime() - new Date(endTime).getTime(),
 | 
					 | 
				
			||||||
      material: Cesium.Color.fromRandom().withAlpha(1),
 | 
					 | 
				
			||||||
    }),
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function getAvailability(startTime, endTime) {
 | 
					 | 
				
			||||||
  const start = Cesium.JulianDate.fromDate(new Date(startTime))
 | 
					 | 
				
			||||||
  const stop = Cesium.JulianDate.fromDate(new Date(endTime))
 | 
					 | 
				
			||||||
  return {
 | 
					 | 
				
			||||||
    availability: new Cesium.TimeIntervalCollection([
 | 
					 | 
				
			||||||
      new Cesium.TimeInterval({ start: start, stop: stop }),
 | 
					 | 
				
			||||||
    ]),
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function removeAllMultiZBTraj() {
 | 
					 | 
				
			||||||
  for (let [key, entity] of multiZBTrajMap.entries()) {
 | 
					 | 
				
			||||||
    viewer.entities.remove(entity)
 | 
					 | 
				
			||||||
    multiZBTrajMap.delete(key)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  for (let [key, entity] of payloadMap.entries()) {
 | 
					 | 
				
			||||||
    entity.forEach(item => {
 | 
					 | 
				
			||||||
      viewer.entities.remove(item)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    payloadMap.delete(key)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -116,7 +116,7 @@ export default defineComponent({
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <NButton
 | 
					            <NButton
 | 
				
			||||||
              disabled={!canPlay.value || showMultiHisTrajCom}
 | 
					              disabled={!canPlay.value || showMultiHisTrajCom.value}
 | 
				
			||||||
              onClick={playMultiTraj}
 | 
					              onClick={playMultiTraj}
 | 
				
			||||||
            >
 | 
					            >
 | 
				
			||||||
              轨迹回放
 | 
					              轨迹回放
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user