# JunctionTools 专用路口编辑工作区 ## 结论 路口应从主地图的上下文控制柄升级为专用编辑工作区。主地图负责发现、选择和进入;`JunctionTools` 负责高密度的局部几何、拓扑和诊断操作。这不改变“OSM 中心线/拓扑只读”和“约束驱动派生输出”的原则。 ## 入口与范围 从路口面或诊断进入,路由参数使用语义引用: ```ts type JunctionRef = | { type: 'node'; id: string } | { type: 'cluster'; id: string } ``` 工作区加载活动 revision 中该 junction 的 context:路口面、外部进口、相邻道路的短上下文、车道/connector、步行带、停止线、斑马线、诊断和当前 constraints。保留返回主地图的入口与位置,避免用户失去全局方位。 ## 统一 UI、不同求解器 普通 node 和复合 cluster 仍共享“进口、角部、控制设施、诊断”的用户心智模型;但 `JunctionTools` 根据 `JunctionRef` 提供不同内部投影: - node:按 OSM node 的 incoming/outgoing approaches 和 corners 编辑。 - cluster:按对外 arms 编辑;内部短连接不作为用户可拖的普通路口边缘,避免约束彼此冲突。 这比强迫主地图显示一套通用控制柄更可靠,也比暴露多套产品工具更易理解。 ## 快速拓扑拟合与更新 此处“拓扑更新”指重新求解**生成道路的可行拓扑**,不修改 OSM 图拓扑:进口横断面、车道分配、connector/movement、路口边界、步行带、停止线、斑马线和标线必须一起重算。 ```text JunctionTools 草稿操作 -> 客户端即时 ghost -> 防抖服务端局部 junction solve -> 返回 fit 后的 junction plan、派生 GeoJSON、拓扑诊断 -> 当前编辑器局部刷新;返回主地图后复用同一 preview ``` 局部解必须校验最小车道宽、连接线包含性、surface 自交、控制设施可放置性与 cluster arm 连续性。无法拟合时返回最后有效几何与结构化诊断;不能把不合法的图形显示成已应用。 ## 与 revision 的关系 `JunctionTools` 的草稿属于活动工作副本的 `EditSession`,不是独立导出文件。用户可以取消并丢弃草稿,或将有效操作合并到主工作区;之后仍通过普通保存和命名检查点进入 revision 历史。 ## 预览与提交状态 “预览”“应用”“保存”是三个不同状态,不能把保存当作看见效果的前提: ```text 首次拖拽 -> session draft + 即时 ghost 防抖服务端返回 -> JunctionTools 显示权威局部几何/诊断预览 应用到工作区 -> 将有效 draft 合并为主工作区的未保存约束;主地图继续显示预览 保存 -> 将活动副本写入持久化文档 保存检查点 -> 冻结为不可变 revision 取消 -> 丢弃未应用的 JunctionTools draft,恢复进入前的工作区状态 ``` 预览必须包含所有受影响的派生对象:道路面、路口面、步行带、车道中心线、connector/movement、停止线、斑马线与标线,以及拟合失败时的诊断和最后一个有效结果。 ## 会话边界 一次 `JunctionTools` 会话严格聚焦一个 `JunctionRef`。进入相邻路口前,用户必须应用或取消当前草稿;系统不允许两个路口草稿在同一个局部 solver session 内并存。已应用但未保存的编辑属于主工作区,可在主地图的普通 undo/redo 中管理。 ## 与道路编辑的所有权 主地图 road editor 只拥有两个 junction reserve 之间的内部 road interval。路口两端的 reserve 在地图上可见但不可由道路区间 handle 覆盖;`JunctionTools` 独占 reserve 内的 approach width、transition、cutback 和 corner 约束。对同一进口,显式 `junction-approach` constraint 优先于道路 profile,solver 在边界自动求连续过渡。 ## 当前阶段的延后边界 `JunctionTools` 会成为核心竞争力,但当前任务只设计其对象边界、会话、预览和约束合同。高级复合路口模板、多个路口联动编辑、控制设施的单对象创作、协作与全面拓扑创作均延后,避免这些问题遮蔽直接编辑基础链路的验证。