10 KiB
10 KiB
路径分析功能实施计划
版本: 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 (新建)
内容:
// 主要模型列表:
// 1. PathDetailedAnalysis - 单条路径详细分析结果
// 2. EndpointGroup - 同终点路径组
// 3. CollisionHotspot - 碰撞热点
// 4. PathComparison - 路径对比
// 5. AnalysisStrategies - 策略常量与权重
验收标准:
- 所有模型类定义完整
- 包含所有必要属性
- XML注释完整
任务 1.2: 分析引擎(6小时)
文件: src/Core/PathAnalysisEngine.cs (新建)
核心方法:
public class PathAnalysisEngine
{
// 1. 单路径分析
public PathDetailedAnalysis AnalyzePath(PathRoute route, AnalysisContext context);
// 2. 路径分组(按终点)
public List<EndpointGroup> GroupPathsByEndpoint(List<PathRoute> routes);
// 3. 热点检测
public List<CollisionHotspot> DetectHotspots(List<CollisionResult> collisions, double radius);
// 4. 各维度评分
private double CalculateSafetyScore(int collisionCount, int hotspotCount);
private double CalculateEfficiencyScore(PathRoute route, double groupMinTime);
private double CalculateTurnDifficultyScore(List<PathEdge> edges);
private double CalculateTortuosityScore(PathRoute route);
private double CalculateRedundancyScore(PathRoute route, List<ChannelInfo> 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 (修改)
修改内容:
- CreateTables() 方法 - 扩展 AnalysisResults 表
-- 新增字段
TurnDifficultyScore REAL
TortuosityScore REAL
RedundancyScore REAL
HotspotCount INTEGER
AnalysisStrategy TEXT
GroupId TEXT
GroupRanking INTEGER
- 新增方法:
// 保存详细分析结果(扩展)
public void SaveDetailedAnalysisResult(PathDetailedAnalysis analysis);
// 根据RouteId获取最新ClashDetective结果
public ClashDetectiveResultRecord GetLatestClashDetectiveResultByRouteId(string routeId);
// 保存热点数据
public void SaveCollisionHotspots(string routeId, List<CollisionHotspot> hotspots);
// 获取路径的热点数据
public List<CollisionHotspot> GetCollisionHotspots(string routeId);
验收标准:
- 新表结构创建成功
- 数据能正确保存和读取
- 旧数据兼容性良好
任务 1.4: 服务层扩展(2小时)
文件: src/Core/PathAnalysisService.cs (修改)
修改内容:
- 扩展 CompareRoutes 方法:
public PathComparisonResult CompareRoutes(List<PathRoute> routes, string strategy)
{
// 1. 路径分组
// 2. 分析每条路径
// 3. 计算组内排名
// 4. 找出最佳路径
// 5. 生成优化建议
}
- 新增方法:
// 分析多条路径并分组
public List<EndpointGroup> AnalyzeAndGroupPaths(List<string> routeIds, string strategy);
// 获取同终点组分析
public EndpointGroupAnalysis GetEndpointGroupAnalysis(string groupId);
验收标准:
- 能完成完整分析流程
- 建议生成合理
- 与现有代码兼容
Phase 2: UI可视化(Day 2-3)
任务 2.1: ViewModel更新(3小时)
文件: src/UI/WPF/ViewModels/PathAnalysisViewModel.cs (修改)
新增属性:
// 策略选择(3种)
public List<string> AvailableStrategies { get; }
// 分析结果
public ObservableCollection<PathDetailedAnalysis> AnalysisResults { get; }
// 同终点组
public ObservableCollection<EndpointGroup> EndpointGroups { get; }
// 当前选中组
public EndpointGroup SelectedGroup { get; set; }
// 组内最佳路径
public PathDetailedAnalysis GroupBestPath { get; set; }
// 优化建议(分类)
public ObservableCollection<CategorizedSuggestion> CategorizedSuggestions { get; }
新增命令:
// 切换策略
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 原生图表或简单自定义控件
图表类型:
-
雷达图: 展示5维度分数
- 使用 WPF Polygon 实现
- 或集成简单图表库
-
柱状图: 组内路径对比
- 使用 WPF Rectangle 实现
- 颜色区分不同路径
文件: 可在 PathAnalysisDialog.xaml 中直接实现,或新建 PathAnalysisCharts.xaml
验收标准:
- 雷达图正确显示5维度
- 柱状图对比清晰
- 图表随选择更新
Phase 3: HTML报告(Day 3-4)
任务 3.1: 报告生成器(4小时)
文件: src/Core/PathAnalysisReportGenerator.cs (新建)
核心方法:
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<PathDetailedAnalysis> analyses);
// 保存报告到文件
public string SaveReportToFile(string htmlContent, string fileName);
}
报告结构:
1. 头部 - 标题、时间、策略
2. 执行摘要 - 最佳路径推荐(高亮卡片)
3. 雷达图 - CSS实现的5维雷达图
4. 同终点组分析 - 组内对比表格
5. 柱状图 - CSS实现的对比图
6. 优化建议 - 分类建议列表
7. 技术参数 - 车辆参数、检测参数
验收标准:
- HTML能离线打开
- 包含所有必要信息
- 样式专业美观
任务 3.2: Chart.js本地部署(可选,1小时)
如需更复杂图表:
文件:
- 下载
chart.min.js到resources/js/ - HTML中引用
<script src="./js/chart.min.js"></script>
注意: 如果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增量升级 |
交付物清单
代码文件
src/Core/Models/PathAnalysisModels.cs(新建)src/Core/PathAnalysisEngine.cs(新建)src/Core/PathAnalysisReportGenerator.cs(新建)src/Core/PathDatabase.cs(修改)src/Core/PathAnalysisService.cs(修改)src/UI/WPF/ViewModels/PathAnalysisViewModel.cs(修改)src/UI/WPF/Views/PathAnalysisDialog.xaml(修改)src/UI/WPF/Views/PathAnalysisDialog.xaml.cs(修改)
资源文件
resources/js/chart.min.js(可选,下载)
文档
doc/working/path_analysis_design.md(已存在)doc/working/path_analysis_implementation_plan.md(本文件)
开始实施
现在开始 Phase 1 - 任务 1.1: 数据模型