编辑
2025-06-26
编程
00
请注意,本文编写于 168 天前,最后修改于 166 天前,其中某些信息可能已经过时。

RoomMapScanner的流程图

terminate
┌─────────────────────────────────────────────────────────────────────────┐ │ RoomMapScanner │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 初始化流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. 构造函数 │ │ - 接收可选的 BeaconScanner 和 RoomMapScannerConfig │ │ - 设置监听器监听信标数据 │ │ 2. initialize() │ │ - 初始化 BeaconScanner │ │ - 加载边界数据 │ │ - 加载信标位置数据 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 扫描控制流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. startScan() │ │ - 清除之前的扫描数据 │ │ - 记录开始时间 │ │ - 启动信标扫描 │ │ - 创建定时器定期更新位置和地图 │ │ 2. pauseScan() │ │ - 取消定时器 │ │ - 停止信标扫描 │ │ 3. resumeScan() │ │ - 重新启动扫描 │ │ 4. stopScan() │ │ - 取消定时器 │ │ - 停止信标扫描 │ │ - 记录结束时间 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 数据处理流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. _onBeaconDataReceived() │ │ - 接收信标数据 │ │ - 更新 BeaconManager │ │ 2. _updatePositionAndMap() │ │ - 计算当前位置 │ │ - 更新位置流 │ │ - 根据采样策略添加到路径 │ │ - 自动模式下尝试添加边界点 │ │ - 更新地图数据 │ │ 3. _calculatePosition() │ │ - 使用 BeaconManager 计算位置 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 边界管理流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. addBoundaryPoint() │ │ - 添加边界点 │ │ - 使缓存失效 │ │ 2. addCurrentPositionAsBoundary() │ │ - 将当前位置添加为边界点 │ │ 3. _tryAddAutomaticBoundaryPoint() │ │ - 计算与上一点的距离 │ │ - 如果超过阈值,自动添加边界点 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 地图生成流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. generateMapImage() │ │ - 检查缓存 │ │ - 准备地图参数 │ │ - 使用 compute 在后台线程生成图像 │ │ - 更新缓存 │ │ 2. _generateMapImageIsolate() │ │ - 在隔离线程中绘制地图 │ │ - 绘制背景和网格 │ │ - 绘制边界 │ │ - 绘制信标 │ │ - 绘制扫描路径和当前位置 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 数据存储流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. saveRoomMap() │ │ - 推断信标位置 │ │ - 创建房间地图数据 │ │ - 保存到文件 │ │ 2. loadRoomMap() │ │ - 从文件加载地图数据 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 资源管理流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. dispose() │ │ - 取消定时器 │ │ - 根据所有权释放 BeaconScanner │ │ - 关闭所有流控制器 │ │ - 清除缓存 │ └─────────────────────────────────────────────────────────────────────────┘
terminate
┌─────────────────────────────────────────────────────────────────────────┐ │ RoomMapScanner │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 初始化流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. 构造函数 │ │ - 接收可选的 BeaconScanner 和 RoomMapScannerConfig │ │ - 设置监听器监听信标数据 │ │ 2. initialize() │ │ - 初始化 BeaconScanner │ │ - 加载边界数据 │ │ - 加载信标位置数据 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 扫描控制流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. startScan() │ │ - 清除之前的扫描数据 │ │ - 记录开始时间 │ │ - 启动信标扫描 │ │ - 创建定时器定期更新位置和地图 │ │ 2. pauseScan() │ │ - 取消定时器 │ │ - 停止信标扫描 │ │ 3. resumeScan() │ │ - 重新启动扫描 │ │ 4. stopScan() │ │ - 取消定时器 │ │ - 停止信标扫描 │ │ - 记录结束时间 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 数据处理流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. _onBeaconDataReceived() │ │ - 接收信标数据 │ │ - 更新 BeaconManager │ │ 2. _updatePositionAndMap() │ │ - 计算当前位置 │ │ - 更新位置流 │ │ - 根据采样策略添加到路径 │ │ - 自动模式下尝试添加边界点 │ │ - 更新地图数据 │ │ 3. _calculatePosition() │ │ - 使用 BeaconManager 计算位置 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 边界管理流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. addBoundaryPoint() │ │ - 添加边界点 │ │ - 使缓存失效 │ │ 2. addCurrentPositionAsBoundary() │ │ - 将当前位置添加为边界点 │ │ 3. _tryAddAutomaticBoundaryPoint() │ │ - 计算与上一点的距离 │ │ - 如果超过阈值,自动添加边界点 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 地图生成流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. generateMapImage() │ │ - 检查缓存 │ │ - 准备地图参数 │ │ - 使用 compute 在后台线程生成图像 │ │ - 更新缓存 │ │ 2. _generateMapImageIsolate() │ │ - 在隔离线程中绘制地图 │ │ - 绘制背景和网格 │ │ - 绘制边界 │ │ - 绘制信标 │ │ - 绘制扫描路径和当前位置 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 数据存储流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. saveRoomMap() │ │ - 推断信标位置 │ │ - 创建房间地图数据 │ │ - 保存到文件 │ │ 2. loadRoomMap() │ │ - 从文件加载地图数据 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 资源管理流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ 1. dispose() │ │ - 取消定时器 │ │ - 根据所有权释放 BeaconScanner │ │ - 关闭所有流控制器 │ │ - 清除缓存 │ └─────────────────────────────────────────────────────────────────────────┘

本文作者:SpikeXiong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!