Initial commit
This commit is contained in:
259
QB303_REALTIME_WEBSOCKET_FIX_GUIDE.md
Normal file
259
QB303_REALTIME_WEBSOCKET_FIX_GUIDE.md
Normal file
@@ -0,0 +1,259 @@
|
||||
# 🔧 QB303实时WebSocket数据显示修复指南
|
||||
|
||||
## 🎯 问题根因分析
|
||||
|
||||
### **您的关键发现:**
|
||||
✅ **测试数据** (`testQB303Data()`) - **可以正常显示在地图上**
|
||||
❌ **实时WebSocket数据** - **无法在地图上显示**
|
||||
|
||||
### **问题根因:**
|
||||
**实时WebSocket数据处理后缺少地图更新调用!**
|
||||
|
||||
## 🔍 详细对比分析
|
||||
|
||||
### **✅ 测试数据处理流程(正常)**
|
||||
```javascript
|
||||
// testQB303Data() 函数
|
||||
handlerSocketMessage(testQB303Message); // 1. 处理数据
|
||||
|
||||
setTimeout(() => {
|
||||
// 2. ⭐ 关键:调用地图更新
|
||||
if (window.m3Data && window.m3Data.qb303DeviceData) {
|
||||
console.log('通知地图更新QB303设备显示...');
|
||||
|
||||
// 从localStorage获取数据并加载到地图
|
||||
const localData = localStorage.getItem("index-otherEquipmentList");
|
||||
const qb303Devices = JSON.parse(localData).filter(...);
|
||||
|
||||
// 更新地图数据结构
|
||||
qb303Devices.forEach(device => {
|
||||
const key = device.equipmentId || device.battleUnitCode;
|
||||
window.m3Data.qb303DeviceData[key].info = {...device}
|
||||
});
|
||||
|
||||
// ⭐ 关键:调用地图渲染
|
||||
window.m3Data.loadrQB303DeviceData();
|
||||
}
|
||||
}, 2000);
|
||||
```
|
||||
|
||||
### **❌ 实时WebSocket数据处理流程(有问题)**
|
||||
```javascript
|
||||
// handlerSocketMessage() 中的 qb303_device_status 处理
|
||||
if (message.biz_code == "qb303_device_status") {
|
||||
// 1. 处理数据并保存到localStorage ✅
|
||||
let qbEquipmentInfo = { /* ... 解析数据 ... */ };
|
||||
otherEquipmentList.value.push(qbEquipmentInfo);
|
||||
localStorage.setItem("index-otherEquipmentList", JSON.stringify(otherEquipmentList.value));
|
||||
|
||||
// 2. ❌ 问题:没有调用地图更新!
|
||||
// 缺失:window.m3Data.loadrQB303DeviceData()
|
||||
}
|
||||
```
|
||||
|
||||
## ✅ 修复方案
|
||||
|
||||
### **已完成的修复:**
|
||||
在实时WebSocket数据处理后添加了地图更新逻辑:
|
||||
|
||||
```javascript
|
||||
// 保存到本地存储
|
||||
localStorage.setItem("index-otherEquipmentList", JSON.stringify(otherEquipmentList.value));
|
||||
|
||||
// ⭐ 关键修复:实时数据处理后立即更新地图显示
|
||||
console.log('🗺️ 实时QB303数据处理完成,更新地图显示...');
|
||||
setTimeout(() => {
|
||||
if (window.m3Data && window.m3Data.qb303DeviceData) {
|
||||
// 从localStorage获取最新的QB303设备数据并加载到地图
|
||||
const localData = localStorage.getItem("index-otherEquipmentList");
|
||||
if (localData) {
|
||||
const qb303Devices = JSON.parse(localData).filter(item =>
|
||||
item.equipmentType === 'QB303设备' && item.online_status
|
||||
);
|
||||
|
||||
console.log(`📍 找到 ${qb303Devices.length} 个在线QB303设备,准备更新地图...`);
|
||||
|
||||
qb303Devices.forEach(device => {
|
||||
const key = device.equipmentId || device.battleUnitCode;
|
||||
if (key && device.online_status) {
|
||||
if (!window.m3Data.qb303DeviceData[key]) {
|
||||
window.m3Data.qb303DeviceData[key] = {}
|
||||
}
|
||||
window.m3Data.qb303DeviceData[key].info = {...device}
|
||||
console.log(`✅ 设备 ${key} 数据已更新: [${device.longitude}, ${device.latitude}]`);
|
||||
}
|
||||
});
|
||||
|
||||
// 调用地图渲染方法
|
||||
if (window.m3Data.loadrQB303DeviceData) {
|
||||
window.m3Data.loadrQB303DeviceData();
|
||||
console.log('🎯 地图渲染方法已调用');
|
||||
}
|
||||
|
||||
// 强制刷新地图显示
|
||||
if (window.m3Data.forceRefreshQB303Devices) {
|
||||
console.log('🔄 强制刷新QB303设备显示');
|
||||
window.m3Data.forceRefreshQB303Devices();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.warn('⚠️ 地图实例或QB303数据结构未初始化');
|
||||
}
|
||||
}, 100); // 短暂延迟确保localStorage更新完成
|
||||
```
|
||||
|
||||
## 🚀 新增测试工具
|
||||
|
||||
### **实时数据测试工具**
|
||||
```javascript
|
||||
testRealTimeQB303() // 专门测试实时WebSocket数据处理和显示
|
||||
```
|
||||
|
||||
**功能:**
|
||||
- 📡 使用您提供的真实实时数据格式
|
||||
- 🔄 模拟完整的WebSocket数据接收和处理流程
|
||||
- 📍 验证数据从接收到地图显示的完整链路
|
||||
- ✈️ 自动飞行到设备位置进行验证
|
||||
|
||||
### **实时数据格式**
|
||||
```javascript
|
||||
{
|
||||
"version": "1.0",
|
||||
"timestamp": 1757760579570,
|
||||
"data": {
|
||||
"host": {
|
||||
"altitude": 200,
|
||||
"latitude": 28.206474523809526,
|
||||
"sid": "2",
|
||||
"platform_type": 1,
|
||||
"database_id": 19,
|
||||
"report_time": 1757760659169,
|
||||
"battle_unit_code": "dy04",
|
||||
"tm": 1757760659169,
|
||||
"longitude": 112.89433833333334
|
||||
},
|
||||
"sn": "2"
|
||||
},
|
||||
"biz_code": "qb303_device_status"
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 修复后的预期结果
|
||||
|
||||
### **使用 `testRealTimeQB303()` 应该看到:**
|
||||
|
||||
#### **1. 数据处理阶段**
|
||||
```
|
||||
=== 测试实时WebSocket QB303数据处理 ===
|
||||
📡 发送实时QB303数据: {...}
|
||||
📍 设备位置: [112.89433833333334, 28.206474523809526]
|
||||
收到QB303设备状态数据: {...}
|
||||
QB303设备 [dy04] 数据已更新
|
||||
🗺️ 实时QB303数据处理完成,更新地图显示...
|
||||
📍 找到 1 个在线QB303设备,准备更新地图...
|
||||
✅ 设备 dy04 数据已更新: [112.89433833333334, 28.206474523809526]
|
||||
🎯 地图渲染方法已调用
|
||||
🔄 强制刷新QB303设备显示
|
||||
```
|
||||
|
||||
#### **2. 地图渲染阶段**
|
||||
```
|
||||
加载QB303设备到地图: dy04 {info: {...}}
|
||||
设备信息: {equipmentId: 'dy04', ...}
|
||||
设备坐标: [112.89433833333334, 28.206474523809526, 200]
|
||||
✅ QB303设备 dy04 已添加到地图
|
||||
```
|
||||
|
||||
#### **3. 结果验证阶段**
|
||||
```
|
||||
=== 实时数据处理结果检查 ===
|
||||
✅ localStorage中QB303设备数量: 1
|
||||
设备 dy04: [112.89433833333334, 28.206474523809526], 在线=true
|
||||
✅ 地图中QB303设备数量: 1
|
||||
地图设备 dy04: [112.89433833333334, 28.206474523809526]
|
||||
QB303设备数据: {dy04: {...}}
|
||||
图层中图形数量: 1
|
||||
找到的QB303图形: 1 个
|
||||
✈️ 相机已飞行到实时设备位置
|
||||
```
|
||||
|
||||
## 🔧 修复前后对比
|
||||
|
||||
### **修复前**
|
||||
- ❌ 实时数据只保存到localStorage
|
||||
- ❌ 没有调用地图渲染方法
|
||||
- ❌ 设备不会显示在地图上
|
||||
- ❌ 测试数据能显示,实时数据不能显示
|
||||
|
||||
### **修复后**
|
||||
- ✅ 实时数据保存到localStorage
|
||||
- ✅ **自动调用地图渲染方法**
|
||||
- ✅ **设备实时显示在地图上**
|
||||
- ✅ **测试数据和实时数据都能正常显示**
|
||||
|
||||
## 🚨 关键修复点
|
||||
|
||||
### **核心问题:**
|
||||
实时WebSocket数据处理缺少这一关键调用:
|
||||
```javascript
|
||||
window.m3Data.loadrQB303DeviceData(); // 地图渲染方法
|
||||
```
|
||||
|
||||
### **修复方案:**
|
||||
在实时数据处理完成后,添加与测试数据相同的地图更新逻辑。
|
||||
|
||||
## 🎯 测试验证
|
||||
|
||||
### **推荐测试步骤:**
|
||||
|
||||
1. **测试实时数据处理**
|
||||
```javascript
|
||||
testRealTimeQB303()
|
||||
```
|
||||
|
||||
2. **对比测试数据处理**
|
||||
```javascript
|
||||
testQB303Data()
|
||||
```
|
||||
|
||||
3. **验证地图显示**
|
||||
- 检查设备图标是否显示在湖南省
|
||||
- 验证设备位置坐标是否正确
|
||||
- 测试点击设备图标的交互功能
|
||||
|
||||
### **故障排除**
|
||||
如果仍有问题,检查:
|
||||
```javascript
|
||||
// 检查地图实例
|
||||
console.log('地图实例:', window.m3Data);
|
||||
|
||||
// 检查渲染方法
|
||||
console.log('渲染方法:', typeof window.m3Data?.loadrQB303DeviceData);
|
||||
|
||||
// 检查数据结构
|
||||
console.log('QB303数据:', window.m3Data?.qb303DeviceData);
|
||||
```
|
||||
|
||||
## 📋 快速命令参考
|
||||
|
||||
```javascript
|
||||
// === 推荐测试命令 ===
|
||||
testRealTimeQB303() // 测试实时数据处理(推荐)
|
||||
testQB303Data() // 测试数据处理(对比)
|
||||
|
||||
// === 基础调试命令 ===
|
||||
debugQB303Rendering() // 检查渲染状态
|
||||
reloadAndShowQB303() // 一键重载显示
|
||||
|
||||
// === 数据检查命令 ===
|
||||
console.log('localStorage:', JSON.parse(localStorage.getItem("index-otherEquipmentList") || "[]"));
|
||||
console.log('地图数据:', window.m3Data?.qb303DeviceData);
|
||||
```
|
||||
|
||||
## 🎉 修复完成
|
||||
|
||||
现在实时WebSocket数据应该能够正常显示在地图上了!
|
||||
|
||||
**关键修复:** 在实时数据处理后添加了与测试数据相同的地图更新调用逻辑。
|
||||
|
||||
请执行 `testRealTimeQB303()` 来验证实时WebSocket数据的完整处理和显示流程!🚁📡✨
|
||||
Reference in New Issue
Block a user