# NavSea Weather Server
Task: WeatherServer_Pipeline
Architecture: NavSea V11
Codex: codex6
Status: TODO

---

# 1 任务目标

创建 Weather Pipeline。

Pipeline 负责自动执行整个天气数据生产流程：

Downloader
→ Grid Builder
→ Vector Tile Generator

输入：

NOAA GFS

输出：

/weather/{time}/{z}/{x}/{y}.pbf

用于 NavSea 客户端加载天气图层。

---

# 2 Pipeline 结构

weather_server/

downloader/
grid/
tiles/
pipeline/

创建文件：

weather_server/pipeline/weather_pipeline.py

---

# 3 Pipeline 执行流程

step1 下载 GRIB

step2 生成 Weather Grid

step3 生成 Vector Tiles

---

# 4 创建 Pipeline 文件

weather_server/pipeline/weather_pipeline.py

---

# 5 实现代码

```python
import os
import subprocess
import time

DOWNLOADER = "weather_server/downloader/gfs_downloader.py"
GRID_BUILDER = "weather_server/grid/grid_builder_v2.py"
TILE_GENERATOR = "weather_server/tiles/vector_tile_generator.py"


def run_step(name, script):

    print("\n==========================")
    print("Running:", name)
    print("==========================\n")

    start = time.time()

    result = subprocess.run(
        ["python", script],
        capture_output=True,
        text=True
    )

    print(result.stdout)

    if result.returncode != 0:
        print("ERROR:", result.stderr)
        raise RuntimeError(name + " failed")

    end = time.time()

    print("\nFinished:", name)
    print("Time:", round(end-start,2),"seconds")


def main():

    print("\nNavSea Weather Pipeline\n")

    run_step("Downloader", DOWNLOADER)

    run_step("Grid Builder", GRID_BUILDER)

    run_step("Vector Tile Generator", TILE_GENERATOR)

    print("\nWeather pipeline completed.\n")


if __name__ == "__main__":
    main()