From 295eb3cc87aaa5176d64a4ef985cdad0bfefae9a Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 31 Mar 2025 08:35:00 +0800
Subject: [PATCH] 增加单个机巢页面
---
src/views/Home/useAggregation.js | 79 +++++++++++++++++++++++++--------------
1 files changed, 50 insertions(+), 29 deletions(-)
diff --git a/src/views/Home/useAggregation.js b/src/views/Home/useAggregation.js
index db6ec45..b724256 100644
--- a/src/views/Home/useAggregation.js
+++ b/src/views/Home/useAggregation.js
@@ -18,27 +18,25 @@
{ name: '国', value: [1169651, 37962800], gJson: zg },
];
let viewer = null;
- const active = ref('');
+ let active = null;
let handler = null;
- let labelDiv = null;
let positionC3 = null;
- const init = () => {
+ const listenerHeight = () => {
determineScaling();
- viewer.camera.moveEnd.addEventListener(() => {
- determineScaling();
- });
+ viewer.camera.moveEnd.addEventListener(determineScaling);
};
// 确定缩放比例
const determineScaling = () => {
+ if(!viewer) return
let height = viewer.camera.positionCartographic.height;
// 根据高度展示对应的 gJson
for (let item of scalingJudgment) {
if (height > item.value[0] && height <= item.value[1]) {
- if (active.value !== item.name) {
+ if (active !== item.name) {
removeEntities();
removeLabel();
- active.value = item.name;
+ active = item.name;
item.gJson ? aggregation(item) : splashed();
}
break;
@@ -127,9 +125,11 @@
});
};
+ // 获取弹框box
const getLabelDom = () => {
- const vNode = h(MapPopUpBox, { data: '参数',removeLabel });
+ const vNode = h(MapPopUpBox, { data: '参数', removeLabel });
const tooltipContainer = document.createElement('div');
+ tooltipContainer.id = 'mapPopUpBox';
tooltipContainer.style.position = 'absolute';
tooltipContainer.style.transform = 'translateY(-50%)';
tooltipContainer.style.pointerEvents = 'none';
@@ -138,50 +138,71 @@
return tooltipContainer;
};
+ // 弹框位置刷新
const labelBox = () => {
- if (!labelDiv) {
- labelDiv = getLabelDom();
+ let dom = document.querySelector('#mapPopUpBox');
+ if (!dom) {
+ dom = getLabelDom();
}
const screenPosition = viewer.scene.cartesianToCanvasCoordinates(positionC3);
if (screenPosition) {
- labelDiv.style.left = `${screenPosition.x}px`;
- labelDiv.style.top = `${screenPosition.y}px`;
+ dom.style.left = `${screenPosition.x}px`;
+ dom.style.top = `${screenPosition.y}px`;
+ dom.style.display = 'block';
}
};
- const clickFun = click => {
+ // 左键单机事件
+ const singleMachineEvent = click => {
const pickedObject = viewer.scene.pick(click.position);
if (Cesium.defined(pickedObject) && pickedObject.id) {
const entity = pickedObject.id;
positionC3 = entity.position._value;
+ viewer.scene.postRender.removeEventListener(labelBox);
viewer.scene.postRender.addEventListener(labelBox);
}
};
+ // 移除 点 和 gjson 实体
const removeEntities = () => {
- viewer.dataSources.removeAll(true);
- viewer.entities.removeAll();
+ viewer.dataSources?.removeAll(true);
+ viewer.entities?.removeAll();
};
+ // 移除弹框标签
const removeLabel = () => {
viewer.scene.postRender.removeEventListener(labelBox);
- if (labelDiv && labelDiv.parentNode) {
- labelDiv.parentNode.removeChild(labelDiv);
- labelDiv = null;
+ const dom = document.querySelector('#mapPopUpBox');
+ if (dom && dom.parentNode) {
+ dom.parentNode.removeChild(dom);
}
};
- onUnmounted(() => {
+ // 移除所有监听事件,变量置空
+ const removeAll = () => {
removeEntities();
removeLabel();
+ viewer.camera.moveEnd.removeEventListener(determineScaling);
handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
- });
+ handler?.destroy();
+ viewer = null;
+ active = null
+ handler = null;
+ positionC3 = null;
+ };
+ const init = () => {
+ viewer = window.$viewer;
+ handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
+ handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+ listenerHeight();
+ };
+ // onMounted(() => {
+ // nextTick(() => {
+ // viewer = window.$viewer;
+ // handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
+ // handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+ // listenerHeight();
+ // });
+ // });
- onMounted(() => {
- nextTick(() => {
- viewer = window.$viewer;
- handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
- handler.setInputAction(clickFun, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- init();
- });
- });
+ return { init,removeAll };
};
--
Gitblit v1.9.3