# 外部WebSocket设备标注集成说明 ## 概述 本文档说明如何使用新创建的外部WebSocket设备标注功能,该功能专门用于处理来自外部WebSocket的无人装备数据并在地图上绘制相应的标注。 ## 新增方法 ### 1. 主要方法 #### `加载外部WebSocket设备标注(deviceData: any)` - **功能**: 处理外部WebSocket数据并在地图上创建/更新设备标注 - **参数**: `deviceData` - 外部WebSocket消息数据 - **返回**: 无 #### `removeExternalDeviceAnnotation(deviceSn: string)` - **功能**: 移除指定设备的地图标注 - **参数**: `deviceSn` - 设备序列号 - **返回**: 无 #### `clearAllExternalDeviceAnnotations()` - **功能**: 清除所有外部设备的地图标注 - **参数**: 无 - **返回**: 无 #### `getExternalDeviceAnnotations()` - **功能**: 获取所有外部设备标注列表 - **参数**: 无 - **返回**: 设备标注数组 ### 2. 辅助方法 #### `extractExternalDeviceInfo(data: any)` - **功能**: 从外部WebSocket数据中提取设备信息 - **参数**: `data` - 原始WebSocket数据 - **返回**: 标准化的设备信息对象 #### `getDeviceIcon(deviceType: string)` - **功能**: 根据设备类型获取对应的图标URL - **参数**: `deviceType` - 设备类型('unmanned_vehicle' 或 'drone') - **返回**: 图标URL字符串 #### `addStrikeRangeForExternalDevice(deviceSn: string, deviceInfo: any)` - **功能**: 为外部设备添加侦察范围显示 - **参数**: - `deviceSn` - 设备序列号 - `deviceInfo` - 设备信息对象 - **返回**: 无 ## 支持的数据格式 ### 1. 外部WebSocket数据格式(您提供的数据) ```javascript { type: "unmanned_vehicle_data", topic: "/CKC/WRJ/PTZT", deviceType: "unmanned_vehicle", data: { XXLX: "PTZT", XXXX: [{ BBH: "V000.00.100", CKZD: { GC: 55.6, JD: 119.068079, WD: 32.04998, ZBID: 'b' }, WRZB: { GC: '55.6', JD: '119.068', WD: '32.05', ZBID: '10002000' }, JKZT: { ZHZT: '1' // 1表示在线,0表示离线 }, YDFX: 0, // 运动方向 YDSD: 0, // 运动速度 SBSJ: "2025-8-15 17:32:57" }] }, timestamp: "2025-09-04T12:37:25.1932Z" } ``` ### 2. 简化位置数据格式 ```javascript { type: "position", device_sn: "FF2023081601", device_name: "哈瓦战斧", longitude: 118.10067, latitude: 32.511448, altitude: 200, online_status: true, strikeRange: 10 } ``` ## 集成步骤 ### 1. 在WebSocket消息处理中调用 ```javascript // 在您的WebSocket消息处理函数中 import { Xiaorui } from '@/utils/aixiaorui'; // 假设您有一个Xiaorui实例 let xiaoruiInstance: Xiaorui; // 处理外部WebSocket消息 function handleExternalWebSocketMessage(data) { console.log('处理外部WebSocket消息:', data); try { // 检查是否是无人车数据格式 if (data.type === 'unmanned_vehicle_data' && data.data && data.data.XXXX) { console.log('检测到无人车数据,开始在地图上绘制...'); // 调用新的外部设备标注方法 if (xiaoruiInstance) { xiaoruiInstance.加载外部WebSocket设备标注(data); } } // 处理其他类型的外部数据 else if (data.type === 'position' && data.longitude && data.latitude) { console.log('检测到位置数据,开始在地图上绘制...'); if (xiaoruiInstance) { xiaoruiInstance.加载外部WebSocket设备标注(data); } } } catch (error) { console.error('处理外部WebSocket消息失败:', error); } } ``` ### 2. 在Vue组件中使用 ```vue ``` ## 功能特性 ### 1. 自动设备类型识别 - 根据数据格式自动识别设备类型(无人车/无人机) - 为不同设备类型使用不同的图标和样式 ### 2. 实时位置更新 - 支持设备位置的实时更新 - 自动同步侦察范围位置 ### 3. 在线状态显示 - 根据设备在线状态显示不同颜色 - 在线设备:绿色高亮 - 离线设备:红色高亮 ### 4. 侦察范围显示 - 自动从设备列表获取侦察范围数据 - 支持右键切换侦察范围显示/隐藏 - 流动边框效果 ### 5. 设备信息标签 - 显示设备名称和序列号 - 支持距离显示条件(50km内可见) - 带背景的标签样式 ## 注意事项 1. **地图实例初始化**: 确保在调用标注方法前,Xiaorui实例的地图和图形图层已正确初始化。 2. **数据格式兼容**: 新方法支持多种数据格式,但主要针对您提供的外部WebSocket数据格式进行了优化。 3. **设备图标**: 确保`/src/assets/icons/car.png`文件存在,用于无人车图标显示。 4. **内存管理**: 使用`removeExternalDeviceAnnotation`和`clearAllExternalDeviceAnnotations`方法及时清理不需要的标注,避免内存泄漏。 5. **错误处理**: 所有方法都包含错误处理,建议在生产环境中添加适当的日志记录。 ## 调试建议 1. 在浏览器控制台中查看相关日志输出 2. 使用`getExternalDeviceAnnotations()`方法检查当前标注状态 3. 确保WebSocket数据格式符合预期 4. 检查地图实例和图形图层的初始化状态 ## 扩展功能 如果需要添加更多功能,可以考虑: 1. 添加设备轨迹显示 2. 支持更多设备类型 3. 添加设备信息弹窗 4. 支持设备分组显示 5. 添加设备搜索和过滤功能