2.9 KiB
2.9 KiB
Web OSM 导入工作流
Goal
让用户无需预先编写 RoadCompilerInput.json 或宿主区域配置,即可通过 Web 工作台上传一个 .osm 文件,创建一次可编译的工作区并开始查看、调整和导出道路结果。
Confirmed Facts
src/compile/compiler.js已提供完整的compileInput(),负责读取 OSM、加载 overrides、生成原生道路图层、诊断和交通信号运行时资产。src/osm.js已提供 OSM XML 解析;src/compile/native-road.js已提供道路模型、几何编译和 overrides 校验。workbench/server.js已提供地图状态、覆盖项保存、交通信号编辑/生成、重新编译和 ZIP 导出接口,但入口假定已有area、配置加载器和编译回调。workbench/client/已有完整的 OpenLayers 编辑界面,当前通过/api/state加载既有编译结果。bin/road-workbench.js当前要求--input <RoadCompilerInput.json>,却把{ input, inputFile, port }传给期待另一种上下文的startWorkbench(),无法独立启动现有工作台。
Requirements
- 工作台启动后提供 OSM 文件导入入口;成功导入后自动建立编译所需的工作区文件和默认参数。
- 导入流程复用现有
compileInput()与已有编辑 API,不复制道路解析或几何编译逻辑。 - 导入后自动执行首次编译,并让现有地图、诊断、覆盖项、交通信号编辑和 ZIP 导出继续可用。
- 导入失败时返回可理解的错误,不破坏当前已加载的工作区。
- 保留通过现有
RoadCompilerInput.json启动工作台的兼容路径(若当前入口契约可修复则继续支持)。 - 默认参数应明确、可追溯,并允许用户在首次编译后通过已有工作台控件调整;本任务不重新设计道路算法或参数模型。
Acceptance Criteria
- 用户运行工作台命令并打开页面,可以选择
.osm文件并提交。 - 服务端保存上传内容,生成有效的 overrides、traffic-signals、输出目录和
options,然后完成一次compileInput();页面显示道路图层和编译诊断。 /api/state、/api/overrides、/api/traffic-signals、/api/compile、/api/export.zip在导入工作区中均正常工作。- 非法文件、空文件、超过限制的上传或编译错误不会留下半成品工作区,并在页面显示错误。
- 现有测试继续通过,并新增覆盖入口/上传/初始化链路的自动化测试。
Out Of Scope
- 修改 OSM 解析规则、道路几何算法、交通信号生成算法或导出包格式。
- 多用户认证、远程持久化、数据库、云端 OSM 下载和在线协作。
- 重新设计现有工作台地图编辑 UI。
Key Decision
每次导入创建独立的本地工作区目录并在当前工作台会话中使用,避免覆盖已有区域配置。工作区保留在磁盘上,后续可通过兼容的 --input 方式恢复。