114 lines
3.7 KiB
Markdown
114 lines
3.7 KiB
Markdown
---
|
||
name: tjwater-workflow-source-service-area-analysis
|
||
description: 水源服务范围分区分析工作流。
|
||
version: 2.0.0
|
||
---
|
||
|
||
# Source Service Area Analysis Workflow Skill
|
||
|
||
## 简介
|
||
基于水力模拟结果的流向数据构建有向图,通过下游遍历确定每个节点的供水水源归属,生成分区渲染数据并在地图上以不同颜色展示各水源的服务范围。
|
||
|
||
## 前置依赖
|
||
|
||
### 依赖 1:水库(水源)列表
|
||
从模拟结果的 node_results 中识别 type=reservoir 的节点,或逐条查询已知水库节点。
|
||
|
||
### 依赖 2:管道拓扑数据
|
||
```
|
||
tjwater_cli:
|
||
command: "network get-link-properties --link P1"
|
||
```
|
||
逐条获取管道 ID 的 node1(起端)、node2(终端),构建管网拓扑。
|
||
|
||
### 依赖 3:水力模拟结果
|
||
```
|
||
tjwater_cli:
|
||
command: "data timeseries realtime links --start-time TIME --end-time TIME"
|
||
timeout: 300
|
||
```
|
||
获取各管段的 `flow`(LPS) 和 `status`,确定水流方向。
|
||
- `flow > 0` → node1 → node2
|
||
- `flow < 0` → node2 → node1
|
||
- `flow ≈ 0` 或 `status != "Open"` → 忽略
|
||
|
||
---
|
||
|
||
## 工作流步骤
|
||
|
||
### 第 1 步:获取三大数据源
|
||
并行调用 CLI 命令获取模拟结果、管道拓扑和水库信息,写入本地临时 JSON 文件。
|
||
|
||
### 第 2 步:构建有向图并计算服务范围
|
||
|
||
```bash
|
||
python scripts/compute_service_areas.py \
|
||
/tmp/opencode/sim_result.json \
|
||
/tmp/opencode/pipes.json \
|
||
/tmp/opencode/reservoirs.json \
|
||
--output /tmp/opencode/service_area_result.json
|
||
```
|
||
|
||
脚本核心逻辑:
|
||
1. **构建无向拓扑图**:从管道属性提取 `(node1, node2)`,构建邻接表
|
||
2. **确定流向**:从模拟结果读取 flow 和 status
|
||
- flow > 0 → node1 → node2
|
||
- flow < 0 → node2 → node1
|
||
- flow ≈ 0 或 status != "Open" → 忽略
|
||
3. **获取水源集合**:从水库列表提取所有水库 ID 作为 source nodes
|
||
4. **多源 BFS 下游遍历**:从所有水源节点同时出发,首次访问归属策略
|
||
5. **统计输出**:各水源服务节点数、占比、未分配节点数
|
||
6. **生成渲染数据**:`node_area_map: { node_id: area_id }`,每个水源分配唯一颜色
|
||
|
||
### 第 3 步:结果验证
|
||
- **服务覆盖率**:正常管网应 > 80%
|
||
- **水源孤立**:某水源服务节点数为 0,检查出口管道是否 Closed
|
||
- **大区未分配**:检查区域与水源之间管道是否 Closed
|
||
|
||
### 第 4 步:前端可视化
|
||
1. `store_render_ref` 将 `node_area_map` 迁移为受控 `render_ref`
|
||
2. `render_junctions` 地图着色
|
||
3. `locate_features` 高亮水源位置
|
||
4. `show_chart` 各水源服务节点数柱状图(可选)
|
||
|
||
### 第 5 步:报告输出
|
||
|
||
```
|
||
---
|
||
## 水源服务范围分析报告
|
||
|
||
### 一、管网概况
|
||
- 总节点数 / 总管段数 / 水源数 / 覆盖率
|
||
|
||
### 二、各水源服务范围
|
||
| 水源 ID | 服务节点数 | 占比 | 颜色 |
|
||
|
||
### 三、未分配节点分析
|
||
- 数量、可能原因
|
||
|
||
### 四、假设与局限
|
||
- 流向基于稳态模拟,不代表所有工况
|
||
- 有向图忽略零流量管段
|
||
```
|
||
|
||
---
|
||
|
||
## 颜色调色板
|
||
脚本内置 20 色:
|
||
```
|
||
#1f77b4, #ff7f0e, #2ca02c, #d62728, #9467bd, #8c564b, #e377c2,
|
||
#7f7f7f, #bcbd22, #17becf, #aec7e8, #ffbb78, #98df8a, #ff9896,
|
||
#c5b0d5, #c49c94, #f7b6d2, #c7c7c7, #dbdb8d, #9edae5
|
||
```
|
||
|
||
## 证据约束
|
||
- 计算脚本的输出是唯一数据真相源
|
||
- 未完成数据回读时不得执行分析
|
||
- 零流量管段视为断连,需在报告中说明
|
||
|
||
## Learned Patterns
|
||
- 核心数据流:模拟结果(流向) + 管道属性(拓扑) + 水库列表(起点) → 有向图 BFS → 分区渲染
|
||
- 有向图遍历前务必过滤 Closed 和零流量管段
|
||
- 渲染数据必须通过 `store_render_ref` 迁移再传给 `render_junctions`
|
||
- 多水源 BFS 首次访问归属策略隐含"距离最近水源"语义
|