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

64 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 斑马线元素级编辑器实验
## 目标
验证“元素级编辑器”能取代只显示固定道路参数手柄的交互:用户点击一组斑马线的任一条带后,整组进入选中状态,地图显示该元素的编辑控件,参数表单与地图操作都能预览、保存和撤销同一份结构化编辑。
斑马线是实验对象,实验通过后才抽象和推广到停止线、箭头、信号灯等元素。
## 已确认的事实
- 当前 `junction-crosswalk-inset` 只改变斑马线相对路口的位置;控制手柄属于被选道路的进口,而非具体斑马线。
- `compileControlMarkings()` 为一组斑马线生成多条 `crosswalk` GeoJSON feature每条 feature 的属性目前不足以作为稳定的组级编辑目标。
- 浏览器已有 `EditSession`、服务端权威 preview、保存、重编译与撤销链路。编辑数据必须保持语义约束不得保存派生 GeoJSON 或屏幕坐标。
- 当前普通道路级手柄仍服务于横断面参数,不应与元素级选择共用或互相覆盖。
## 范围
### 第一阶段:元素选择与位置闭环
1. 点击任意一条斑马线条带,选中整组斑马线;点击空白处或另一道路元素清除或切换选择。
2. 后端为每组斑马线发布稳定 `elementId`、元素类型、语义锚点、可编辑参数与受影响 feature ID客户端不得由 feature 数组位置猜测分组。
3. 选中后显示轻量的元素级编辑状态,至少有位置控制;移动只允许沿该进口定义的合法轴和范围,钳位来自服务端 manifest。
4. 位置控制和参数表单共同更新既有 `junction-crosswalk-inset` 约束,并复用 preview、保存、撤销与重编译链路。
5. 表单显示当前值、单位、合法范围和阻塞性诊断;修改后更新地图预览,保存后重新编译仍为 `exact`
### 第二阶段:尺寸与外观闭环(本任务内设计、第一阶段通过后实施)
1. 选中框提供与斑马线语义相符的长度/宽度调整,不写自由像素缩放。
2. 表单可修改斑马线长度、宽度、条带数量和条带间距;地图控件与表单写同一结构化元素参数。
3. 编译器消费这些参数生成整组条带,并对不合法组合返回阻塞诊断。
## 明确不做
- 不实现通用的任意旋转、自由二维移动、任意缩放或把 transform 矩阵持久化。
- 不编辑多组斑马线,不跨进口/跨路口拖放,不改变 OSM 中心线或路口拓扑。
- 不在本任务中推广停止线、箭头或信号灯;不提前建立“所有元素”的大而全抽象。
- 不移除或改变道路横断面、路口 shape 的现有手柄和所有权。
## 验收标准
- [ ] 点击一条条带后,整组条带显示为同一选中元素;切换到另一组或空白处时状态正确更新。
- [ ] `elementId` 在同一输入、重编译、保存和重新加载后稳定;同组条带共享一个 ID不同斑马线不共享。
- [ ] 移动控件与表单修改位置时,预览只更新该元素及其声明的受影响层;无效输入保留最后一个有效预览并显示诊断。
- [ ] 保存、刷新、重新编译后位置不回退,相关约束状态为 `exact`;未保存编辑可以撤销/重做。
- [ ] 第二阶段完成后,长度/宽度/条带数量/间距能从表单和地图控件一致地更新,非法尺寸或间距被拒绝而非静默修复。
- [ ] 现有道路级手柄仍可独立工作,且未选中斑马线时不显示元素编辑 UI。
- [ ] `npm run format:check``npm run test``npm run test:client``npm run test:client:unit``npm run build` 通过。
## 风险与门槛
- 第一阶段必须先证明 feature -> element -> semantic anchor 的稳定回链,以及非空约束确实改变正式编译输出;两者任一失败时停止,不进入尺寸和外观参数。
- 选中框是交互反馈,不能成为第二个几何模型;所有位置、范围和尺寸的权威值由后端 element manifest 给出。
- 当前地图 feature 的属性可能缺少足以识别 crossing 的稳定字段。需要先通过编译器补充,不可在客户端按经纬度近似聚类。
## Acceptance Criteria
- [ ] TBD
## Notes
- Keep `prd.md` focused on requirements, constraints, and acceptance criteria.
- Lightweight tasks can remain PRD-only.
- For complex tasks, add `design.md` for technical design and `implement.md` for execution planning before `task.py start`.