# 摄像头图标重叠问题修复报告 🔧 ## 问题描述 在摄像头图标更新时,没有清除之前的图标,导致地图上出现图标重叠的现象。 ## 问题根源分析 ### 1. 固定摄像头视野扇形重叠 - **问题位置**: `src/web_server.py` 第3730行附近 - **原因**: 摄像头位置更新时,只更新了`cameraMarker`的位置,但没有同步更新`fixedCameraFOV`视野扇形 - **表现**: 旧的视野扇形仍然显示在原位置,新的视野扇形在新位置,造成重叠 ### 2. 移动设备朝向标记重叠 - **问题位置**: `src/web_server.py` 第2491行附近 - **原因**: 移动设备朝向更新时,`orientationMarker`是复合对象(包含`deviceMarker`和`viewSector`),但只简单调用了`map.remove()` - **表现**: 设备标记和视野扇形没有被完全清除,导致重叠 ### 3. 变量作用域问题 - **问题位置**: `src/web_server.py` 第1647行 - **原因**: `fixedCameraFOV`使用`const`声明,无法在其他函数中重新赋值 - **影响**: 摄像头位置更新函数无法更新全局视野扇形引用 ## 修复内容 ### ✅ 修复1:自动配置时的视野扇形同步更新 ```javascript // 🔧 修复:同步更新视野扇形位置,避免图标重叠 if (fixedCameraFOV) { // 移除旧的视野扇形 map.remove(fixedCameraFOV); // 重新创建视野扇形在新位置 const newFOV = createGeographicSector( lng, lat, result.data.camera_heading || config.CAMERA_HEADING, config.CAMERA_FOV, 100, // 100米检测范围 '#2196F3' // 蓝色,与固定摄像头标记颜色匹配 ); map.add(newFOV); // 更新全局变量引用 fixedCameraFOV = newFOV; } ``` ### ✅ 修复2:手动配置时的视野扇形同步更新 ```javascript // 🔧 修复:手动配置时也要同步更新视野扇形 // 同步更新视野扇形 if (fixedCameraFOV) { map.remove(fixedCameraFOV); const newFOV = createGeographicSector( lng, lat, heading, config.CAMERA_FOV, 100, '#2196F3' ); map.add(newFOV); fixedCameraFOV = newFOV; } ``` ### ✅ 修复3:移动设备朝向标记的正确清除 ```javascript // 🔧 修复:正确移除旧的视野扇形标记,避免重叠 if (mobileDeviceMarkers[deviceId].orientationMarker) { // orientationMarker是一个复合对象,包含deviceMarker和viewSector const oldOrientation = mobileDeviceMarkers[deviceId].orientationMarker; if (oldOrientation.deviceMarker) { map.remove(oldOrientation.deviceMarker); } if (oldOrientation.viewSector) { map.remove(oldOrientation.viewSector); } } ``` ### ✅ 修复4:变量作用域调整 ```javascript // 将 const 改为 var,允许重新赋值 var fixedCameraFOV = createGeographicSector(...); ``` ## 测试验证 修复后,以下操作不再出现图标重叠: 1. **自动配置摄像头位置** - 视野扇形会同步移动到新位置 2. **手动配置摄像头位置** - 视野扇形会同步更新位置和朝向 3. **移动设备朝向更新** - 旧的设备标记和视野扇形会被完全清除 4. **摄像头朝向变更** - 视野扇形会反映新的朝向角度 ## 影响范围 ✅ **已修复的功能**: - 固定摄像头位置更新 - 固定摄像头朝向更新 - 移动设备位置更新 - 移动设备朝向更新 - 手动配置摄像头 ✅ **无影响的功能**: - 人员检测标记更新(原本就有正确的清除逻辑) - 远程设备标记更新(原本就有正确的清除逻辑) - 其他地图功能 ## 技术细节 - **修改文件**: `src/web_server.py` - **修改行数**: 约15行代码修改 - **兼容性**: 完全向后兼容,不影响现有功能 - **性能影响**: 无负面影响,实际上减少了地图上的冗余元素 ## 📝 补充修复:重复无人机图标问题 ### 问题描述 用户反映地图上出现了2个无人机图标,但应该只有1个无人机图标和1个电脑图标。 ### 根源分析 移动设备同时显示了两个独立的🚁标记: - `locationMarker`:GPS位置标记 - `orientationMarker`:朝向标记(包含视野扇形) ### ✅ 修复方案 1. **移除重复的位置标记**:删除独立的`locationMarker` 2. **合并功能到朝向标记**:朝向标记同时承担位置和朝向显示 3. **更新清除逻辑**:移除对`locationMarker`的引用 4. **添加数据缓存**:为点击事件提供设备数据支持 ### 🎯 修复后的效果 - **固定摄像头(电脑端)**:💻电脑图标 + 蓝色视野扇形 - **移动设备(移动端)**:🚁无人机图标 + 朝向箭头 + 橙色视野扇形 ## 总结 通过这次修复,彻底解决了摄像头图标重叠的问题,确保地图上的标记状态与实际配置始终保持一致,提升了用户体验。同时解决了重复无人机图标的问题,让图标显示更加清晰和直观。