脉冲点列表和导出

This commit is contained in:
2026-06-17 20:27:57 +08:00
parent 73c2fc2ffa
commit bf0e8f2e26
5 changed files with 654 additions and 8 deletions
+47 -8
View File
@@ -90,6 +90,8 @@ export const useAnalysisButton = (): AnalysisButtonState => {
const showAreaDialog = ref(false);
const radius = ref(10);
const dialogPosition = reactive<DialogPosition>({ x: 0, y: 0 });
const pulsePoints = ref<PointResource[]>([]);
const showPulsePointList = ref(false);
let clickHandler: ScreenSpaceEventHandler | null = null;
let currentCenterPosition: Cartesian3 | null = null;
@@ -184,6 +186,8 @@ export const useAnalysisButton = (): AnalysisButtonState => {
const pointsInCircle = getPointsInCircle(currentCenterPosition, radius.value);
addPulseEffectToPoints(pointsInCircle);
pulsePoints.value = pointsInCircle;
showPulsePointList.value = true;
};
// ==================== 地图事件处理 ====================
@@ -236,17 +240,26 @@ export const useAnalysisButton = (): AnalysisButtonState => {
};
// ==================== 资源清理 ====================
const clearAllAnalysisResources = () => {
removeMarker();
clearCircle();
removePulseEffect();
currentCenterPosition = null;
pulsePoints.value = [];
showPulsePointList.value = false;
};
/**
* 仅清除视觉效果,保留标记点和中心点位置
*/
const clearVisualEffectsOnly = () => {
clearCircle();
removePulseEffect();
pulsePoints.value = [];
showPulsePointList.value = false;
};
// ==================== 事件处理 ====================
const handleConfirm = () => {
const handleConfirm = () => {
if (!currentCenterPosition) {
console.error('中心点位置不存在');
return;
@@ -256,11 +269,16 @@ export const useAnalysisButton = (): AnalysisButtonState => {
radius: radius.value,
center: currentCenterPosition
});
// 先清除上一次的视觉效果(保留标记点)
clearVisualEffectsOnly();
// 重新绘制当前选择的效果
drawCircle(currentCenterPosition, radius.value);
const pointsInCircle = getPointsInCircle(currentCenterPosition, radius.value);
addPulseEffectToPoints(pointsInCircle);
pulsePoints.value = pointsInCircle;
showPulsePointList.value = true;
const cartographic = Cartographic.fromCartesian(currentCenterPosition);
const longitude = cartographic.longitude * (180 / Math.PI);
@@ -268,12 +286,28 @@ export const useAnalysisButton = (): AnalysisButtonState => {
const flyHeight = Math.max(radius.value * FLY_HEIGHT_MULTIPLIER, MIN_FLY_HEIGHT);
CesiumUtilsSingleton.flyToTarget([longitude, latitude, flyHeight], FLY_DURATION);
// 关闭对话框并清理资源(包括鼠标样式)
showAreaDialog.value = false;
// 移除地图点击事件监听器,恢复鼠标默认样式
if (clickHandler) {
clickHandler.destroy();
clickHandler = null;
}
// 恢复鼠标默认样式
const viewer = CesiumUtilsSingleton.getViewer();
if (viewer?.canvas) {
statusStore.cursorStyle = 'default';
viewer.canvas.style.cursor = 'default';
}
};
const handleCancel = () => {
showAreaDialog.value = false;
clearAllAnalysisResources();
pulsePoints.value = [];
showPulsePointList.value = false;
};
const handleButtonClick = (index: number, callback: (status: boolean) => void) => {
@@ -320,9 +354,12 @@ export const useAnalysisButton = (): AnalysisButtonState => {
() => infra.value.showReservoir.show,
];
watch(layerVisibilityWatchers, () => {
console.log('检测到图层可见性变化,刷新脉冲效果');
refreshPulseEffect();
watch(layerVisibilityWatchers, () => {
// 只有当有中心点位置且脉冲点列表正在显示时,才刷新脉冲效果
if (currentCenterPosition && showPulsePointList.value) {
console.log('检测到图层可见性变化,刷新脉冲效果');
refreshPulseEffect();
}
});
onUnmounted(() => {
@@ -361,7 +398,7 @@ export const useAnalysisButton = (): AnalysisButtonState => {
},
];
return {
return {
selectedButtonIndex,
showAreaDialog,
radius,
@@ -371,5 +408,7 @@ export const useAnalysisButton = (): AnalysisButtonState => {
handleConfirm,
handleCancel,
refreshPulseEffect,
pulsePoints,
showPulsePointList,
};
};