feat: add web OSM import workflow
This commit is contained in:
40
.trellis/tasks/08-26-web-osm-import/prd.md
Normal file
40
.trellis/tasks/08-26-web-osm-import/prd.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 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` 方式恢复。
|
||||
Reference in New Issue
Block a user