You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Software_Architecture/distance-judgement/CAMERA_ICON_OVERLAP_FIX.md

137 lines
5.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 摄像头图标重叠问题修复报告 🔧
## 问题描述
在摄像头图标更新时,没有清除之前的图标,导致地图上出现图标重叠的现象。
## 问题根源分析
### 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. **添加数据缓存**:为点击事件提供设备数据支持
### 🎯 修复后的效果
- **固定摄像头(电脑端)**:💻电脑图标 + 蓝色视野扇形
- **移动设备(移动端)**:🚁无人机图标 + 朝向箭头 + 橙色视野扇形
## 总结
通过这次修复,彻底解决了摄像头图标重叠的问题,确保地图上的标记状态与实际配置始终保持一致,提升了用户体验。同时解决了重复无人机图标的问题,让图标显示更加清晰和直观。