NavisworksTransport/doc/working/path_analysis_implementation_plan.md

10 KiB
Raw Blame History

路径分析功能实施计划

版本: 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 (修改)

修改内容:

  1. CreateTables() 方法 - 扩展 AnalysisResults 表
-- 新增字段
TurnDifficultyScore REAL
TortuosityScore REAL  
RedundancyScore REAL
HotspotCount INTEGER
AnalysisStrategy TEXT
GroupId TEXT
GroupRanking INTEGER
  1. 新增方法:
// 保存详细分析结果(扩展)
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 (修改)

修改内容:

  1. 扩展 CompareRoutes 方法:
public PathComparisonResult CompareRoutes(List<PathRoute> routes, string strategy)
{
    // 1. 路径分组
    // 2. 分析每条路径
    // 3. 计算组内排名
    // 4. 找出最佳路径
    // 5. 生成优化建议
}
  1. 新增方法:
// 分析多条路径并分组
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
- 策略选择RadioButton3种
- [开始分析] 按钮

中间面板(可变):
- 数据对比表格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 (新建)

核心方法:

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.jsresources/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增量升级

交付物清单

代码文件

  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 (修改)

资源文件

  1. resources/js/chart.min.js (可选,下载)

文档

  1. doc/working/path_analysis_design.md (已存在)
  2. doc/working/path_analysis_implementation_plan.md (本文件)

开始实施

现在开始 Phase 1 - 任务 1.1: 数据模型