Files
road-compiler/.trellis/tasks/08-28-crosswalk-element-editor/implement.md

2.5 KiB
Raw Permalink Blame History

实施计划

0. 建立事实与测试夹具

  • 追踪 compileControlMarkings() 的每条 stripe 属性、native_id 构成和从地图点击到 onFeature 的路径。
  • 添加失败优先的测试:同组 stripe 需要稳定共享 elementId,不同 crossing 不得共享;空编辑输出与基线一致。
  • 门禁:能证明一个具体 feature 无歧义回链到一个 junction approach 和 crossing。

1. 第一阶段:元素 manifest 与选择

  • 在编译器为 crosswalk stripe 写稳定的元素标识和回链属性。
  • 在 direct-edit 服务响应中增量发布按 selection/element 获取的元素 manifest不扩大现有道路 handle 的职责。
  • 客户端建立 ElementSelection 纯状态与 feature 点击适配;点击 stripe 选择整组、空白清除。
  • 验证编译器单元测试、API 测试、客户端 selection 单元测试。

2. 第一阶段:位置编辑闭环

  • 用 element manifest 的 position control 渲染元素级控件和选中外框;安装时不得影响道路 handle hit-test。
  • 从位置手势和表单走同一个 draft builder写入 junction-crosswalk-inset
  • 验证:拖拽与表单值生成同形约束;预览/保存/重载一致;exact 状态和撤销/重做覆盖。
  • 门禁:一次非空编辑可在正式重编译结果中观察到斑马线位置变化。失败即停止,不能只交付 UI。

3. 复盘门禁

  • 手测选中、取消、道路级手柄共存、拖拽钳位、表单验证、保存重载。
  • 只有在第一阶段验收全部通过后,才能为尺寸/外观参数做持久化 schema 决策。

4. 第二阶段:尺寸与外观

  • 依据第一阶段证据设计并验证长度、宽度、条带数、间距的约束 schema。
  • 编译器读取参数、返回 blocking diagnostics元素 manifest 表达对应控件/字段。
  • 实现与表单字段完全一致的尺寸控件,补齐组合参数、持久化和 rebase 测试。

验证命令

npm run format:check
npm run test
npm run test:client
npm run test:client:unit
npm run build

风险文件

  • src/compile/native-road.js:斑马线生成与默认输出兼容性。
  • src/compile/direct-edit-solver.js / native-road-edits.js约束求解、schema 和 manifest 必须同步。
  • workbench/server.jselement manifest 查询与 preview 不得写入磁盘。
  • workbench/client/src/components/MapCanvas.tsxApp.tsxedit/:选择、临时控件和表单不得污染 baseline layer。