Files
road-compiler/.trellis/tasks/08-26-web-osm-import/prd.md

2.9 KiB
Raw Blame History

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

  1. 工作台启动后提供 OSM 文件导入入口;成功导入后自动建立编译所需的工作区文件和默认参数。
  2. 导入流程复用现有 compileInput() 与已有编辑 API不复制道路解析或几何编译逻辑。
  3. 导入后自动执行首次编译,并让现有地图、诊断、覆盖项、交通信号编辑和 ZIP 导出继续可用。
  4. 导入失败时返回可理解的错误,不破坏当前已加载的工作区。
  5. 保留通过现有 RoadCompilerInput.json 启动工作台的兼容路径(若当前入口契约可修复则继续支持)。
  6. 默认参数应明确、可追溯,并允许用户在首次编译后通过已有工作台控件调整;本任务不重新设计道路算法或参数模型。

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 方式恢复。