# 路径分析功能实施计划 > 版本: 1.0 > 日期: 2026-02-14 > 总预计工期: 3-4天 --- ## 实施阶段概览 | 阶段 | 内容 | 预计工期 | 优先级 | |-----|------|---------|-------| | Phase 1 | 核心算法与数据结构 | 1.5天 | P0 - 必须先完成 | | Phase 2 | UI可视化 | 1天 | P1 - 依赖Phase 1 | | Phase 3 | HTML报告 | 0.5天 | P2 - 依赖Phase 1 | --- ## Phase 1: 核心算法与数据结构(Day 1-2) ### 任务 1.1: 数据模型(2小时) **文件**: `src/Core/Models/PathAnalysisModels.cs` (新建) **内容**: ```csharp // 主要模型列表: // 1. PathDetailedAnalysis - 单条路径详细分析结果 // 2. EndpointGroup - 同终点路径组 // 3. CollisionHotspot - 碰撞热点 // 4. PathComparison - 路径对比 // 5. AnalysisStrategies - 策略常量与权重 ``` **验收标准**: - [ ] 所有模型类定义完整 - [ ] 包含所有必要属性 - [ ] XML注释完整 --- ### 任务 1.2: 分析引擎(6小时) **文件**: `src/Core/PathAnalysisEngine.cs` (新建) **核心方法**: ```csharp public class PathAnalysisEngine { // 1. 单路径分析 public PathDetailedAnalysis AnalyzePath(PathRoute route, AnalysisContext context); // 2. 路径分组(按终点) public List GroupPathsByEndpoint(List routes); // 3. 热点检测 public List DetectHotspots(List collisions, double radius); // 4. 各维度评分 private double CalculateSafetyScore(int collisionCount, int hotspotCount); private double CalculateEfficiencyScore(PathRoute route, double groupMinTime); private double CalculateTurnDifficultyScore(List edges); private double CalculateTortuosityScore(PathRoute route); private double CalculateRedundancyScore(PathRoute route, List channels); // 5. 加权评分 public double CalculateWeightedScore(PathDetailedAnalysis analysis, string strategy); // 6. 组内最佳路径 public PathRoute FindBestPathInGroup(EndpointGroup group, string strategy); } ``` **验收标准**: - [ ] 能正确计算5维度分数 - [ ] 能正确检测碰撞热点(3米范围,≥2次) - [ ] 路径分组正确(2米阈值) - [ ] 加权评分符合权重配置 --- ### 任务 1.3: 数据库扩展(3小时) **文件**: `src/Core/PathDatabase.cs` (修改) **修改内容**: 1. **CreateTables() 方法** - 扩展 AnalysisResults 表 ```sql -- 新增字段 TurnDifficultyScore REAL TortuosityScore REAL RedundancyScore REAL HotspotCount INTEGER AnalysisStrategy TEXT GroupId TEXT GroupRanking INTEGER ``` 2. **新增方法**: ```csharp // 保存详细分析结果(扩展) public void SaveDetailedAnalysisResult(PathDetailedAnalysis analysis); // 根据RouteId获取最新ClashDetective结果 public ClashDetectiveResultRecord GetLatestClashDetectiveResultByRouteId(string routeId); // 保存热点数据 public void SaveCollisionHotspots(string routeId, List hotspots); // 获取路径的热点数据 public List GetCollisionHotspots(string routeId); ``` **验收标准**: - [ ] 新表结构创建成功 - [ ] 数据能正确保存和读取 - [ ] 旧数据兼容性良好 --- ### 任务 1.4: 服务层扩展(2小时) **文件**: `src/Core/PathAnalysisService.cs` (修改) **修改内容**: 1. **扩展 CompareRoutes 方法**: ```csharp public PathComparisonResult CompareRoutes(List routes, string strategy) { // 1. 路径分组 // 2. 分析每条路径 // 3. 计算组内排名 // 4. 找出最佳路径 // 5. 生成优化建议 } ``` 2. **新增方法**: ```csharp // 分析多条路径并分组 public List AnalyzeAndGroupPaths(List routeIds, string strategy); // 获取同终点组分析 public EndpointGroupAnalysis GetEndpointGroupAnalysis(string groupId); ``` **验收标准**: - [ ] 能完成完整分析流程 - [ ] 建议生成合理 - [ ] 与现有代码兼容 --- ## Phase 2: UI可视化(Day 2-3) ### 任务 2.1: ViewModel更新(3小时) **文件**: `src/UI/WPF/ViewModels/PathAnalysisViewModel.cs` (修改) **新增属性**: ```csharp // 策略选择(3种) public List AvailableStrategies { get; } // 分析结果 public ObservableCollection AnalysisResults { get; } // 同终点组 public ObservableCollection EndpointGroups { get; } // 当前选中组 public EndpointGroup SelectedGroup { get; set; } // 组内最佳路径 public PathDetailedAnalysis GroupBestPath { get; set; } // 优化建议(分类) public ObservableCollection CategorizedSuggestions { get; } ``` **新增命令**: ```csharp // 切换策略 public ICommand ChangeStrategyCommand { get; } // 选择组 public ICommand SelectGroupCommand { get; } // 高亮最佳路径 public ICommand HighlightBestPathCommand { get; } ``` **验收标准**: - [ ] 数据绑定正确 - [ ] 策略切换触发重新计算 - [ ] 组选择显示详细信息 --- ### 任务 2.2: 对话框界面更新(4小时) **文件**: `src/UI/WPF/Views/PathAnalysisDialog.xaml` (修改) **布局调整**: ``` 左侧面板(300px): - 路径选择列表(CheckBox) - 策略选择(RadioButton,3种) - [开始分析] 按钮 中间面板(可变): - 数据对比表格(5维度分数) - 雷达图(选中路径) - 同终点组列表 - 组标题(终点位置) - 组内路径(最佳路径高亮) 右侧面板(300px): - 最佳路径卡片 - 优化建议列表(分类) - [导出报告] 按钮 ``` **验收标准**: - [ ] 布局合理,信息清晰 - [ ] 最佳路径视觉突出 - [ ] 表格数据完整 --- ### 任务 2.3: 图表可视化(3小时) **实现方式**: 使用 WPF 原生图表或简单自定义控件 **图表类型**: 1. **雷达图**: 展示5维度分数 - 使用 WPF Polygon 实现 - 或集成简单图表库 2. **柱状图**: 组内路径对比 - 使用 WPF Rectangle 实现 - 颜色区分不同路径 **文件**: 可在 `PathAnalysisDialog.xaml` 中直接实现,或新建 `PathAnalysisCharts.xaml` **验收标准**: - [ ] 雷达图正确显示5维度 - [ ] 柱状图对比清晰 - [ ] 图表随选择更新 --- ## Phase 3: HTML报告(Day 3-4) ### 任务 3.1: 报告生成器(4小时) **文件**: `src/Core/PathAnalysisReportGenerator.cs` (新建) **核心方法**: ```csharp public class PathAnalysisReportGenerator { // 生成完整报告 public string GenerateHtmlReport(PathAnalysisReportData data); // 生成雷达图数据(纯CSS实现) private string GenerateRadarChartCss(PathDetailedAnalysis analysis); // 生成柱状图数据(纯CSS实现) private string GenerateBarChartCss(EndpointGroup group); // 生成表格HTML private string GenerateComparisonTable(List analyses); // 保存报告到文件 public string SaveReportToFile(string htmlContent, string fileName); } ``` **报告结构**: ```html 1. 头部 - 标题、时间、策略 2. 执行摘要 - 最佳路径推荐(高亮卡片) 3. 雷达图 - CSS实现的5维雷达图 4. 同终点组分析 - 组内对比表格 5. 柱状图 - CSS实现的对比图 6. 优化建议 - 分类建议列表 7. 技术参数 - 物体参数、检测参数 ``` **验收标准**: - [ ] HTML能离线打开 - [ ] 包含所有必要信息 - [ ] 样式专业美观 --- ### 任务 3.2: Chart.js本地部署(可选,1小时) **如需更复杂图表**: **文件**: - 下载 `chart.min.js` 到 `resources/js/` - HTML中引用 `` **注意**: 如果CSS图表足够,可跳过此步骤 --- ## 每日工作计划 ### Day 1 | 时间 | 任务 | 输出 | |-----|------|------| | 09:00-11:00 | 任务1.1: 数据模型 | PathAnalysisModels.cs | | 11:00-12:00 | 任务1.3: 数据库扩展(上)| PathDatabase.cs 修改 | | 14:00-17:00 | 任务1.2: 分析引擎(上)| PathAnalysisEngine.cs 框架 | | 17:00-18:00 | 任务1.3: 数据库扩展(下)| 完成数据库方法 | ### Day 2 | 时间 | 任务 | 输出 | |-----|------|------| | 09:00-12:00 | 任务1.2: 分析引擎(下)| 完成核心算法 | | 14:00-16:00 | 任务1.4: 服务层扩展 | PathAnalysisService.cs 修改 | | 16:00-18:00 | Phase 1 测试调试 | 验证算法正确性 | ### Day 3 | 时间 | 任务 | 输出 | |-----|------|------| | 09:00-12:00 | 任务2.1: ViewModel更新 | PathAnalysisViewModel.cs | | 14:00-17:00 | 任务2.2: 对话框界面 | PathAnalysisDialog.xaml | | 17:00-18:00 | 任务2.3: 图表可视化 | 雷达图/柱状图实现 | ### Day 4 | 时间 | 任务 | 输出 | |-----|------|------| | 09:00-12:00 | 任务3.1: 报告生成器 | PathAnalysisReportGenerator.cs | | 14:00-15:00 | 任务3.2: Chart.js部署(可选)| resources/js/ | | 15:00-17:00 | 整体测试优化 | 修复问题 | | 17:00-18:00 | 文档更新 | 更新设计文档 | --- ## 关键检查点 ### 检查点1: Phase 1完成(Day 2下午) - [ ] 能成功分析单条路径 - [ ] 5维度分数计算正确 - [ ] 热点检测正确 - [ ] 数据能保存到数据库 ### 检查点2: Phase 2完成(Day 3下午) - [ ] UI能显示分析结果 - [ ] 雷达图/柱状图正常 - [ ] 同终点组分组正确 - [ ] 最佳路径高亮显示 ### 检查点3: 项目完成(Day 4下午) - [ ] HTML报告生成成功 - [ ] 所有功能集成测试通过 - [ ] 代码审查完成 --- ## 风险与应对 | 风险 | 概率 | 影响 | 应对 | |-----|------|------|------| | 碰撞位置数据格式不符 | 中 | 高 | 提前检查数据结构,准备备选方案 | | 通道属性获取复杂 | 中 | 中 | 先使用简化方案,后续优化 | | WPF图表实现困难 | 低 | 中 | 使用纯CSS图表,或简化显示 | | 数据库升级失败 | 低 | 高 | 备份数据,使用ALTER TABLE增量升级 | --- ## 交付物清单 ### 代码文件 1. `src/Core/Models/PathAnalysisModels.cs` (新建) 2. `src/Core/PathAnalysisEngine.cs` (新建) 3. `src/Core/PathAnalysisReportGenerator.cs` (新建) 4. `src/Core/PathDatabase.cs` (修改) 5. `src/Core/PathAnalysisService.cs` (修改) 6. `src/UI/WPF/ViewModels/PathAnalysisViewModel.cs` (修改) 7. `src/UI/WPF/Views/PathAnalysisDialog.xaml` (修改) 8. `src/UI/WPF/Views/PathAnalysisDialog.xaml.cs` (修改) ### 资源文件 9. `resources/js/chart.min.js` (可选,下载) ### 文档 10. `doc/working/path_analysis_design.md` (已存在) 11. `doc/working/path_analysis_implementation_plan.md` (本文件) --- ## 开始实施 现在开始 **Phase 1 - 任务 1.1: 数据模型**