Files
road-compiler/.trellis/tasks/archive/2026-08/08-26-direct-edit-map-editor/design.md

23 lines
1.9 KiB
Markdown
Raw 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.
# 设计
技术合约不在本文重复定义。权威定义见父任务 `.trellis/tasks/08-26-direct-manipulation-road-editor/design.md` 的以下小节:
- 「Handle manifest」— 客户端读取的字段与 `reserves` 禁入区语义。
- 「坐标与单位分层」— 客户端渲染用 EPSG:3857指针位移换米必须先回 4326 再用球面距离。
- 「预览时序与延迟预算」— 80ms 防抖、`pointerup` 最终请求、`previewSeq` 乱序丢弃、`degraded` 处理。
- 「交互与预览」「编辑所有权」— 只读基线图层、三个独立 source、道路区间与 junction reserve 的边界。
- 「客户端边界」— 遗留 `app.js` 不在范围、`vitest` 覆盖范围。
- 「上线与回滚形态」— `directEdit` 开关默认关闭时的行为。
输入 adapter 的候选、探针退出条件与回退优先级见父任务 `research/canvas-integration.md`
## 本子任务的局部决定
- 三个 source 严格分离:`editHandles`(手柄)、`editGhost`(客户端即时轮廓与辅助线)、`editPreview`(服务端权威几何)。基线图层始终只读,绝不写入。
- 手柄 feature 的 properties 只带 `handleId`,语义一律回 manifest 查。这样客户端没有第二份约束模型。
- ghost 只画手柄、辅助线与半透明预估轮廓,不承担权威几何。服务端预览到达后替换 `editPreview`ghost 随即淡出。
- `EditSession` 是纯逻辑对象,不持有 OpenLayers 引用命令栈、undo/redo、`previewSeq` 仲裁都可在 node 环境下单测。OL 只作为它的输入输出适配层。
- `previewSeq` 仲裁放在 `EditSession` 而非请求层:请求层只负责发与取消,丢弃决策要可测。
- 探针独立成可删除目录,不进 `MapCanvas`。探针结论只影响"手柄命中与拖拽由谁实现",不影响上面任何一条。
- 开关关闭时不注册 interaction、不请求 manifest、不创建三个 source确保零残留开销。