4.8 KiB
4.8 KiB
🔧 QB303设备数据为空问题修复指南
🎯 问题分析
从调试输出可以看出:
- ❌ QB303设备数据为空:
{} - ❌ 图层中图形数量为0: 说明没有设备被创建
- ✅ 图层显示状态正常:
true - ✅ 相机位置正常: 在江苏省附近
🔍 问题根因
QB303设备数据没有被正确加载到地图实例中,可能的原因:
- 数据加载时机问题 - 地图初始化时QB303数据还没准备好
- 数据传递问题 - localStorage中的数据没有正确传递到地图实例
- 渲染方法调用问题 - QB303渲染方法没有被正确调用
✅ 已完成的修复
1. 修复调试工具错误
// 修复前:导致TypeError
const graphics = window.m3Data.graphicLayer._graphics;
const qb303Graphics = graphics.filter(g => g.name === 'QB303设备');
// 修复后:安全的访问方式
const graphics = window.m3Data.graphicLayer._graphics || [];
const qb303Graphics = graphics.filter ? graphics.filter(g => g && g.name === 'QB303设备') : [];
2. 新增强制数据加载工具
forceLoadQB303Data() // 强制从localStorage加载QB303设备数据
3. 新增完整调试流程
fullQB303Debug() // 完整的6步调试流程
🚀 新增调试工具
1. 强制加载QB303数据
forceLoadQB303Data()
功能:
- 检查localStorage中的设备数据
- 筛选在线QB303设备
- 加载到地图实例的qb303DeviceData
- 调用渲染方法
2. 完整调试流程
fullQB303Debug()
功能:
- 步骤1:检查localStorage数据
- 步骤2:检查地图实例
- 步骤3:强制加载QB303数据
- 步骤4:检查渲染状态
- 步骤5:创建测试图标
- 步骤6:手动更新设备
🎮 推荐的修复流程
方法1:完整自动化调试
fullQB303Debug()
这会自动执行完整的6步调试流程,包括数据检查、加载、渲染和测试。
方法2:分步手动调试
// 1. 强制加载数据
forceLoadQB303Data()
// 2. 检查渲染状态
debugQB303Rendering()
// 3. 创建测试图标
createTestQB303Icon()
// 4. 手动更新设备
manualUpdateDevices()
📊 预期的修复结果
修复后的调试输出应该显示:
✅ localStorage中QB303设备总数: 2
✅ 在线QB303设备: 1
✅ 设备 dy04: 在线=true, 位置=[112.8945530952381, 28.20648476190476]
✅ 地图实例正常
✅ 初始化QB303设备数据对象
✅ 加载设备 dy04: {...}
✅ 最终QB303设备数据: {dy04: {...}}
✅ 调用地图渲染方法
✅ QB303设备数据: {dy04: {...}}
✅ 图层中图形数量: 1
✅ 找到的QB303图形: 1 个
🔍 故障排除
如果localStorage中没有数据
// 先发送测试数据
testQB303Data()
// 等待2秒后再强制加载
setTimeout(() => {
forceLoadQB303Data()
}, 2000)
如果地图实例未初始化
// 检查地图是否已加载
console.log('地图实例:', window.m3Data)
console.log('地图对象:', window.m3Data?.map)
console.log('图形图层:', window.m3Data?.graphicLayer)
如果渲染方法不存在
// 检查渲染方法
console.log('QB303渲染方法:', typeof window.m3Data?.loadrQB303DeviceData)
console.log('所有可用方法:', Object.getOwnPropertyNames(window.m3Data).filter(name => name.includes('QB303')))
🎯 测试验证
验证数据加载成功
// 检查数据是否正确加载
console.log('QB303设备数据:', window.m3Data.qb303DeviceData)
console.log('设备数量:', Object.keys(window.m3Data.qb303DeviceData).length)
验证图形创建成功
// 检查图形是否创建
console.log('图层数量:', window.m3Data.graphicLayer.length)
console.log('图层内容:', window.m3Data.graphicLayer._graphics)
验证位置是否正确
// 飞行到设备位置
window.m3Data.map.flyTo({
destination: Cesium.Cartesian3.fromDegrees(112.8945530952381, 28.20648476190476, 1000)
})
📋 快速命令参考
// === 数据修复 ===
forceLoadQB303Data() // 强制加载QB303数据
fullQB303Debug() // 完整调试流程
// === 状态检查 ===
debugQB303Rendering() // 检查渲染状态
createTestQB303Icon() // 创建测试图标
// === 基础功能 ===
testQB303Data() // 发送测试数据
manualUpdateDevices() // 手动更新设备
🚨 重要提醒
- 执行顺序很重要 - 先确保localStorage有数据,再加载到地图
- 等待时间 - 有些操作需要等待异步完成
- 检查控制台 - 关注每步的详细日志输出
现在请执行 fullQB303Debug() 进行完整的自动化调试,这会帮助我们找到并修复数据为空的问题!🚁🔧✨