Initial import of NavSea pbf project
This commit is contained in:
114
tasks/pipline.md
Normal file
114
tasks/pipline.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# 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()
|
||||
Reference in New Issue
Block a user