| | |
| | | import uavImg from '@/assets/images/home/useUavHome/uavImg.png' |
| | | import eventSingle from '@/assets/images/home/useEventOperate/eventSingle.png' |
| | | |
| | | import DevicePopUpBox from '@/hooks/useMapAggregation/DevicePopUpBox.vue' |
| | | import EventPopUpBox from '@/hooks/useMapAggregation/EventPopUpBox.vue' |
| | | import DevicePopUpBox from '@/hooks/components/DevicePopUpBox.vue' |
| | | import EventPopUpBox from '@/hooks/components/EventPopUpBox.vue' |
| | | |
| | | import { render } from 'vue' |
| | | import { useStore } from 'vuex' |
| | |
| | | import cesiumOperation from '@/utils/cesium-tsa' |
| | | import { getDeviceRegion, getDeviceRegionCount, getEventDetails, getMapEvents } from '@/api/home/aggregation' |
| | | import { PolyGradientMaterial } from '@/utils/cesium/Material' |
| | | import { start } from 'nprogress' |
| | | /** |
| | | * 机巢聚合功能 |
| | | */ |
| | |
| | | const store = useStore() |
| | | const userAreaCode = computed(() => store.state.user.userInfo.detail.areaCode) |
| | | const selectedAreaCode = computed(() => store.state.user.selectedAreaCode) |
| | | |
| | | |
| | | const eventTimeType = computed(() => store.state.home.eventTimeType) |
| | | const eventTimeRang = computed(() => store.state.home.eventTimeRang) |
| | | |
| | | const singleUavHome = computed(() => store.state.home.singleUavHome) |
| | | |
| | | let needFly = true |
| | | |
| | | const combinedValues = computed(() => ({ |
| | | selectedAreaCode: selectedAreaCode.value, |
| | | eventTimeType: eventTimeType.value, |
| | | eventTimeRang: eventTimeRang.value, |
| | | singleUavHome: singleUavHome.value, |
| | | })) |
| | | |
| | | let saveParams = { area_code: '', date_enum: 'CURRENT_WEEK' } |
| | | |
| | | |
| | | // 确定缩放比例 |
| | |
| | | // 事件散点 |
| | | let eventList = [] |
| | | function processChildren (childrens) { |
| | | // console.log(childrens, '事件点') |
| | | return (childrens || []).map(item => { |
| | | const arr = processChildren(item.childrens) |
| | | if (item.data) { |
| | |
| | | } |
| | | |
| | | // 获取事件聚合 |
| | | function getMapEventCount (areaCode) { |
| | | return getMapEvents({ areaCode }).then(res => { |
| | | function getMapEventCount (params) { |
| | | return getMapEvents(params).then(res => { |
| | | const resData = res?.data?.data |
| | | if (resData?.data) { |
| | | eventList = resData?.data |
| | |
| | | const initMapData = async areaCode => { |
| | | eventList = [] |
| | | if (!areaCode) return |
| | | const list = type === 'device' ? await getDeviceCount(areaCode) : await getMapEventCount(areaCode) |
| | | saveParams.area_code = areaCode |
| | | const list = type === 'device' ? await getDeviceCount(areaCode) : await getMapEventCount(saveParams) |
| | | const splashedList = type === 'device' |
| | | ? await getDeviceList(areaCode) |
| | | : eventList.map(i => ({ eventId: i.id, latitude: Number(i.latitude), longitude: Number(i.longitude), type: 'event' })) |
| | |
| | | } |
| | | } |
| | | |
| | | watch(combinedValues, async (newValue, oldValue) => { |
| | | if (newValue.singleUavHome?.device_sn) { |
| | | clearMapEntity() |
| | | return |
| | | } |
| | | |
| | | let needFly = true |
| | | if (newValue.eventTimeType) { |
| | | saveParams = { area_code: newValue.selectedAreaCode, date_enum: store.state.home.eventTimeParams } |
| | | } |
| | | |
| | | watch( |
| | | selectedAreaCode, |
| | | async (newValue, oldValue) => { |
| | | needFly = true |
| | | if (!viewer) return |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | initMapData(newValue).then(() => { |
| | | viewer.scene.postRender.addEventListener(determineScaling) |
| | | }) |
| | | }, |
| | | if (newValue.eventTimeRang) { |
| | | saveParams = { area_code: newValue.selectedAreaCode, start_date: newValue.eventTimeRang[0], end_date: newValue.eventTimeRang[1] } |
| | | } |
| | | |
| | | needFly = true |
| | | if (!viewer) return |
| | | handlerInit() |
| | | |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | |
| | | initMapData(newValue.selectedAreaCode).then(() => { |
| | | viewer.scene.postRender.addEventListener(determineScaling) |
| | | }) |
| | | }, |
| | | { deep: true } |
| | | ) |
| | | |
| | |
| | | let clickTargets = viewer.scene.drillPick(click.position).map(item => item.id) |
| | | if (!clickTargets.length) return |
| | | |
| | | console.log(clickTargets, 11111) |
| | | |
| | | let deviceAggregationFind = findTypeItem(clickTargets, (item) => item?.properties?.customData?._value?.data?.type === 'deviceAggregation') |
| | | let deviceFind = findTypeItem(clickTargets, (item) => item?.properties?.customData?._value?.data?.type === 'device') |
| | | // "event" |
| | | let eventFind = findTypeItem(clickTargets, (item) => item?.properties?.customData?._value?.data?.type === 'event') |
| | | // let eventFind = findTypeItem(clickTargets, (item) => item?.properties?.customData?._value?.data?.type === 'eventAggregation') |
| | | currentEntity = deviceAggregationFind || deviceFind || eventFind |
| | | |
| | | if (!currentEntity) return |
| | | if (!currentEntity?.position?._value) return |
| | | // 一定要移除 |
| | |
| | | |
| | | // 移除所有监听事件,变量置空 |
| | | const removeAll = () => { |
| | | clearMapEntity() |
| | | viewer = null |
| | | } |
| | | |
| | | const clearMapEntity = () => { |
| | | if (!viewer) return |
| | | removeEntities() |
| | | removeLabel() |
| | |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | handler?.destroy() |
| | | viewer = null |
| | | active = null |
| | | handler = null |
| | | currentEntity = null |
| | | } |
| | | |
| | | const init = () => { |
| | | viewer = window.$viewer |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | initMapData(selectedAreaCode.value || userAreaCode.value).then(() => { |
| | | viewer.scene.postRender.addEventListener(determineScaling) |
| | | }) |
| | | |
| | | handlerInit() |
| | | } |
| | | |
| | | const handlerInit = () => { |
| | | if (handler) return |
| | | |
| | | handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) |
| | | handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | |
| | | } |
| | | |
| | | onBeforeUnmount(() => { }) |
| | | // onMounted(() => { |
| | | // nextTick(() => { |